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

logback日志无法输出问题

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

问题排查

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

依赖冲突

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


image.png

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

<dependency>
            <groupId>com.***.***.config</groupId>
            <artifactId>****-client</artifactId>
        </dependency>

点进去,发现这个


image.png

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

总结

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • idea 添加注释/** 然后回车 选中代码块 Ctrl+Shift+/ 重点推荐阅读:https://www....
    Helen_Cat阅读 20,116评论 0 37
  • 一、日志框架 市面上的日志框架有JUL、JCL、Jboss-logging、logback、Log4j、log4j...
    马斯克瑞德阅读 2,146评论 0 1
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 5,020评论 0 6
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 5,080评论 1 13
  • 一、日志简介 1.1 日志是什么(WHAT) 日志:记录程序的运行轨迹,方便查找关键信息,也方便快速定位解决问题。...
    GeekerLou阅读 27,473评论 6 20