问题描述
在web应用开发过程中发现部署在服务器中的应用日志突然不见了,服务器中只有tomcat或jboss的重启启动日志在打印,但应用本身设置的日志文件没有打印出来。
问题分析
该应用分支是刚从主干check下来的,而且主干分支在服务器上部署后是正常的,所有日志文件及文件内的日志信息都能正常打印和显示。
根据之前经验判断由于应用部署是成功的,并且提交的新代码中只是在maven工程的pom文件中引入了新的依赖包,初步怀疑是由于新引入的包导致logback包冲突引起的。
解决方案
通过mvn dependency命令打出来该maven工程的依赖数,果然出现了两个不同版本的logback引用情况。
使用exclusion命令对低版本的logback包进行排除操作,参考示例如下:
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
主要是logback-classic的包冲突引起的,经过唯一版本确认后重新部署应用,日志顺利打印出来。
问题总结
一开始以为是log4j的包冲突引起的,后来排查结果却是logback包问题,之前对这两两者区别不是很了解,经过这次问题排查也顺便学习了一下这方面的知识:
logback介绍
LogBack被分为3个组件,logback-core, logback-classic 和 logback-access。其中
logback-core提供了LogBack的核心功能,是另外两个组件的基础;
logback-classic则实现了Slf4j的API,所以当想配合Slf4j使用时,需要将logback-classic加入classpath;
logback-access是为了集成Servlet环境而准备的,可提供HTTP-access的日志接口。
由于logback在技术实现及性能上具有无可比拟的优势,现在一般都是使用logback,慢慢替代log4j。