在一个Maven项目中,使用commons-logging做log4j日志的记录,但是突然有一天发现,spring框架可以通过log4j将日志记录在日志文件中,而代码输出的所有日志都没有了,仔细检查,发现,代码中使用的
是org.apache.commons.logging.LogFactory类进行记录日志的操作,定位org.apache.commons.logging.LogFactory类,发现系统中找到三个包都有这个类(路径完全一样),分别是:
commons-logging-1.2.jar,spring-jcl-5.0.2.RELEASE.jar, 和jcl-over-slf4j.jar, 显然包冲突了,系统不知道调用哪个类,所以就没有记录日志,jcl-over-slf4j不知道是从哪里引用的,在项目下
执行maven命令:mvn dependency:tree,显示结果如下:
[INFO] +- org.ansj:ansj_seg:jar:sources:5.1.5:compile
[INFO] +- org.apache.solr:solr-solrj:jar:7.2.1:compile
[INFO] | +- commons-io:commons-io:jar:2.5:compile
[INFO] | +- org.apache.commons:commons-math3:jar:3.6.1:compile
[INFO] | +- org.apache.httpcomponents:httpclient:jar:4.5.3:compile
[INFO] | +- org.apache.httpcomponents:httpcore:jar:4.4.6:compile
[INFO] | +- org.apache.httpcomponents:httpmime:jar:4.5.3:compile
[INFO] | +- org.apache.zookeeper:zookeeper:jar:3.4.10:compile
[INFO] | +- org.codehaus.woodstox:stax2-api:jar:3.1.4:compile
[INFO] | +- org.codehaus.woodstox:woodstox-core-asl:jar:4.4.1:compile
[INFO] | +- org.noggit:noggit:jar:0.8:compile
[INFO] | +- org.slf4j:jcl-over-slf4j:jar:1.7.7:compile
[INFO] | \- org.slf4j:slf4j-api:jar:1.7.7:compile
[INFO] \- org.postgresql:postgresql:jar:42.2.2:compile
显然,jcl-over-slf4j是被solr包依赖的,一次项目开发中,引入了solr包,自此,就不能记录日志了。
系统是不需要jcl-over-slf4j包的,所以,需要去除jcl-over-slf4j包,调整pom.xml文件如下:
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<!-- 去掉对jcl-over-slf4j的依赖,防止记录日志工程类包冲突 -->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
通过exclusions标签,把jcl-over-slf4j包去掉,重新构建,运行项目,日志出来了。