场景

依赖

org.apache.zookeeper

zookeeper

3.4.13

org.slf4j

slf4j-api

1.7.36

jar

compile

ch.qos.logback

logback-core

1.2.11

jar

ch.qos.logback

logback-classic

1.2.11

jar

。。。

代码

public class ApiTest {

private final Logger logger = LoggerFactory.getLogger(ApiTest.class);

@Test

public void test(){

logger.info("Lasse到此一游");

}

}

不尽人意的结果:没有任何输出

网上找了一堆文章都无法解决,最后只能自己手撕源码了。

问题点

方法:org.slf4j.LoggerFactory.getILoggerFactory();

找错思路

可以看到我明明导入了logback-classic依赖,它却使用了slf4j-log4j12

又在网上搜索了找了一下有没有指定使用特定依赖包下的StaticLoggerBinder,结果无。

又想到是否根据依赖导入的顺序,当机立断去看哪个依赖导入了slf4j-log4j12

最后找到了是org.apache.zookeeper引用了slf4j-log4j12

解决方法

LoggerFactory是根据加载顺序指定使用哪个依赖下的StaticLoggerBinder的。

所以调整依赖的顺序。

将logback-classic顺序放到依赖的最上方

org.slf4j

slf4j-api

1.7.36

jar

compile

ch.qos.logback

logback-core

1.2.11

jar

ch.qos.logback

logback-classic

1.2.11

jar

org.apache.zookeeper

zookeeper

3.4.13

结果查看

使用理想中的依赖

方法:org.slf4j.LoggerFactory.getILoggerFactory();

可以看到它用到了logback-classic下的StaticLoggerBinder类

控制台输出

总结

今后除了关注依赖冲突,版本冲突还有多加一项依赖的加载顺序。

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: