log4j同时满足按日期和限制文件大小分割日志

前言

log4j提供了DailyFileAppender和RollingFileAppender两种方式存储,但不支持同时使用两种方式,需自定义类继承FileAppender,实现日志记录同时满足按日期和限制文件大小分割。

实现效果:

在这里插入图片描述
日期按目录归类,同一天的日志假定文件名为sql,存放在sql中,但sql文件超出限制文件大小,更名为“sql_1.log”,再新建一个sql文件,以此循环。
换句话说,当前写入日志永远是在sql文件,但当天的完整日志写入顺序是:
sql_1.log,sql_2.log, … , sql

实现过程:

编写log4j.properties配置文件:

log4j.rootLogger = console,file
#console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.Threshold=INFO
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
#file
log4j.appender.file=com.log4jdemo.DailyRollingFileAppender
log4j.appender.file.Threshold=INFO
#注意file路径与项目对齐
log4j.appender.file.File=./logs/yyyy-MM-dd/sql
log4j.appender.file.MaxBackupIndex=-1
log4j.appender.file.MaxFileSize=10KB
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %m%n
log4j.appender.file.append=true

自定义DailyRollingFileAppender类扩展FileAppender类:

public class DailyRollingFileAppender extends FileAppender {
   
   
    /**
     * The default maximum file size is 10MB.
     */
    protected long maxFileSize = 10 * 1024 * 1024;

    /**
     * There is one backup file by default.
     */
    protected int maxBackupIndex = 1;

    /**
     * The default constructor does nothing.
     */
    public DailyRollingFileAppender() {
   
   
    }

    /**
     * ouput destination for this appender.
     */
    public DailyRollingFileAppender(Layout layout, String filename) throws IOException {
   
   
        super(layout, filename, true);
        activateOptions();
    }

    /**
     * being rolled over to backup files.
     *
     * @since 1.1
     */
    public long getMaximumFileSize() {
   
   
        return maxFileSize;
    }

    /**
     * being rolled over to backup files.
     *
     * <p>
     * JavaBeans {@link java.beans.Introspector Introspector}.
     *
     * @see #setMaxFileSize(String)
     */
    public void setMaximumFileSize(long maxFileSize) {
   
   
        this.maxFileSize = maxFileSize;
    }

    /**
     * being rolled over to backup files.
     *
     * <p>
     * the value "10KB" will be interpreted as 10240.
     */
    public void setMaxFileSize(String value) {
   
   
        maxFileSize = OptionConverter.toFileSize(value, maxFileSize + 1);
    }

    /**
     * Returns the value of the <b>MaxBackupIndex</b> option.
     */
  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值