记录一次日志打印错误,日期错乱的排坑过程

现象:

本地日志配置采用log4j,配置文件如下:

记录一次日志打印错误,日期错乱的排坑过程_第1张图片

正常日志打印应该是:今天info日志打在server.log里,到第二天,假如是2019-07-30,昨天的日志应该重命名为server.log.2019-07-29,今天日志照常打印在server.log里

然而,诡异的是,2019-07-30当天的线上日志打印在了2019-07-29,而2019-07-29日的日志归档到了server.log.2019-07-28

记录一次日志打印错误,日期错乱的排坑过程_第2张图片

让人摸不着头脑的是,我项目里明明没有配置过 server.2019-07-29这种格式,server.error这种格式

在本地、测试服务器多次测试打印也没有复现这种现象,而且线上机器重启后又是正常的,问题出在每天凌晨分割日志时

我一直怀疑是见鬼了,难道是机器的问题??于是耽搁了几天。。

后来运维催的急,把线上的包down下来后发现我的包里有两个日志配置文件:logback.xml与log4j.xml

记录一次日志打印错误,日期错乱的排坑过程_第3张图片

打开logback.xml文件终于知道线上日志打印的原因了

记录一次日志打印错误,日期错乱的排坑过程_第4张图片

最后定位到这个包是我项目里依赖的一个第三方包里生成的,问题也是我7月24号上线引入这个包后才发生的

知道原因之后,就好解决了,找生成包的提供者,让它打包时把logback.xml这个配置文件给排除掉就好了

 

总结:

1.引用第三方包时,很容易出现包冲突问题,毕竟很多基础的包都是互相依赖的。同时,之前一直忽略的,引用包时要注意有没有配置文件,以防和自己的配置文件冲突

2.排查问题时,需要不断追究问题本质。比如我一直觉得我的日志配置没有问题,而且线上也没有改动过,上线的都是业务代码,应该没啥影响。。万万没想到,果然还是新上线代码引入的jar包引起的,所以对比代码,思考区别和联系很重要

3.至于为什么线上会优先读取logback.xml,,logback和log4j有什么区别和联系,这个还有待深入了解,或者有大佬看到后能解释下

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(线上问题解决,log4j,logback,maven,配置冲突)