log4j2滚动删除丢日志的问题排查
最近排查线上问题,遇到几次线上日志从凌晨0点到全天的某一个随机的时刻日志丢失了,如图所示,打开每天的第一个文件不是从0点开始的日志,莫名其妙的丢失一部分日志。
![](https://img2020.cnblogs.com/i-beta/1683887/202003/1683887-20200323191656191-416640614.png)
项目是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"/>,在一定程序上也会侧面解决这个问题