Logback 日志按天分割


系统出现了日志无法按天切割生成日志文件的问题,所有的日志都在一个日志文件里面,只有每次重启的时候才会重新生成文件。

以下是有问题的日志配置代码。

"FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    class="ch.qos.logback.classic.filter.ThresholdFilter">
        INFO
    
 
    class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        ${LOG_HOME}/info.log.%d{yyyy-MM-dd}.log 30  class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n  class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 10MB  

该配置使用了基于时间的滚动切割策略 TimeBasedRollingPolicy,每天0点自动生成一份新的日志文件。

但里面包含了一段 triggeringPolicy 触发策略,即最大单个文件超过 10MB 自动新成新日志文件, TimeBasedRollingPolicy 是基于时间的,不能和其他策略一起组合使用。

解决办法

1、去掉组合策略 triggeringPolicy

"FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    class="ch.qos.logback.classic.filter.ThresholdFilter">
        INFO
    
 
    class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        ${LOG_HOME}/info.log.%d{yyyy-MM-dd}.log 30  class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n  

2、使用时间和大小组合策略 SizeAndTimeBasedRollingPolicy

"FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    class="ch.qos.logback.classic.filter.ThresholdFilter">
        INFO
    
 
    class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        ${LOG_HOME}/info.log.%d{yyyy-MM-dd}.%i.log 30 20MB  class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n  

注意后面的 %i 是必须要加上去的,是单个日志文件超大小后的切割序号。

使用以上两种方案都可以解决 Logback 无法按天切割生成日志的问题,如果这两种解决不了你的问题,那你也要检查下你的滚动策略是否使用正确。