记一次线上无日志输出问题

logback日志无法输出问题

上个星期,一次项目正常上线后,监控了一会发现除了容器的启动日志以外,无任何的日志输出,更奇怪的是,五台服务器,配置一样,四台无日志输出,有一台正常的输出(到现在都没找出来,那一台为什么会打印出来),那也没办法啊,因为上的是一个定时任务系统,先看看任务是否正常跑,各种数据查找对比,cpu利用率,内存使用率对比之后,服务器是运行正常的,这让我松了好大一口气,最起码没有出线上问题,下面就得找出“元凶是什么了”。

问题排查

其实在排查这个问题的时候,走了不少弯路,因为注意力总在为啥有一台服务器是正常的,刚开始一直以为是服务器不同分组的问题,找运维,运维说服务器正常,然后又手动清了一下日志文件,但是呢还是没有日志输出。
这只能反映出来一个问题,是上线的内容导致的,但是还是有个坑,预发环境一点问题都没有,这两个坑就把我绕进去了,实在没办法,只能请教师傅了(笔者工作半年)。师傅起初遇到这个问题也很纳闷,也被这俩坑绕进去了,最后没有办法,只能对比预发环境和线上环境的配置,然后就发现问题了,线上环境只有loback.xml文件,而预发环境里面不仅有logback.xml文件还有log4j.properties文件(一般我们日志的话有slf4j,log4j,logback几种选择,具体大家自行百度),把log4j.properties文件复制到线上环境上,重启机器,日志正常输出,解决。

依赖冲突

那么,为什么会导致这样的情况呢?得分析出来原因啊,仔细看之前的容器启动日志,发现有这么一个警告:


image.png

报警大致的意思就是,系统日志输出不知道是绑定到log4j还是绑定在logkack上,默认就绑定在了log4j上(至于为啥,我目前还没弄清楚),所以线上没有log4j.properties配置文件就无法输出日志了。
那么为什么之前用的logback用的好好的,升级之后就不行呢。“幕后黑色”就是依赖冲突。
升级的时候引入了一个jar包,公司内部的jar包,就不说具体名字了


            com.***.***.config
            ****-client
        

点进去,发现这个


image.png

基本原因就出来,因为这个jar包依赖的是log4j,所以线上运行的时候,日志就无法输出啦!
解决办法 1.把两个依赖给排除掉(首选)
2.环境中添加log4j.properties文件(次选)

总结

1.如果出现一些启动问题的话,还是应该多看启动日志的告警或者是错误信息,而不要去纠结为什么这个行,而那个不行。
2.关于依赖冲突的问题,后面会写一个文章。
结束!

你可能感兴趣的:(记一次线上无日志输出问题)