logback每天生成日誌失敗,TimeBasedRollingPolicy和SizeBasedTriggeringPolicy衝突
阿新 • • 發佈:2018-12-10
之前都是用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