最近排查線上問題,遇到幾次線上日志從凌晨0點到全天的某一個隨機的時刻日志丟失了,如圖所示,打開每天的第一個文件不是從0點開始的日志,莫名其妙的丟失一部分日志。

項目是spring-boot項目,日志的組件是log4j2
version=1.5.12.RELEASE
groupId=org.springframework.boot
artifactId=spring-boot-starter-log4j2
排查過程:
1、查看服務器的contab刪除日志的腳本,后來經排查分析否則。
2、推測分析可能是回滾刪除日志的log4j2配置有問題,經過查log4j2的源碼及配置和線上日志的現象對比分析。
問題的根源:LOG4J2 默認對壓縮文件只保留7個文件數量.
Once this values is reached older archives will be deleted on subsequent rollovers. The default value is 7.
官網:http://logging.apache.org/log4j/2.x/manual/appenders.html
解決方案:
找到原因,接下來的事就好辦了,
1、在RollingFile 節點下的DefaultRolloverStrategy增加max屬性,比如:<DefaultRolloverStrategy max=“50”>解決。
2、把回滾文件的大小增大,比如<SizeBasedTriggeringPolicy size="2GB"/>,在一定程序上也會側面解決這個問題