1. 程式人生 > >logback每天生成日誌失敗,TimeBasedRollingPolicy和SizeBasedTriggeringPolicy衝突

logback每天生成日誌失敗,TimeBasedRollingPolicy和SizeBasedTriggeringPolicy衝突

之前都是用log4j列印日誌,而logback因為效能和功能性的優勢,取代log4j也是一個大趨勢,新專案中開始使用logback記錄日誌,我們的需求是每天生成一個或多少日誌,每個日誌檔案最大100M

配置如下:

<appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日誌檔案輸出的檔名-->
            <FileNamePattern>${LOG_HOME}/info.%d{yyyyMMdd}.log</FileNamePattern>
            <!--日誌檔案保留天數-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日誌檔案最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>100MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

然而看到日誌資料夾時   

info.20180901.log
info.20180903.log
info.20180908.log

怎麼少了日誌,中間那幾天的日誌去哪兒了?

再仔細回憶一下,9月1號、9月3號、9月8號都是我更新應用的時期,也就是重啟應用的時候有生成一個當天的日誌

而後續執行並沒有按預期每天生成一個或多個日誌

然後發現是 TimeBasedRollingPolicy和SizeBasedTriggeringPolicy衝突了

我們需要更換一個Policy,換成ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy就可以滿足我們的需要了

修改後的配置如下:

<appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日誌檔案輸出的檔名-->
            <FileNamePattern>${LOG_HOME}/info.%d{yyyyMMdd}.%i.log</FileNamePattern>
            <!-- 日誌檔案最大尺寸 -->
            <maxFileSize>100MB</maxFileSize>
            <!--日誌檔案保留天數-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

其中 %d %i 兩個引數是必須不可少的

執行幾天後的日誌資料夾是:

info.20180909.0.log
info.20180910.0.log
info.20180910.1.log
info.20180911.0.log