log4j与logback包冲突原因及解决,不可忽视的Warning (2)

这里可以看到reportMultipleBindingAmbiguity()里判断是否发生多重绑定,就是打印文章开头Warning信息的地方。
成功加载StaticLoggerBinder后,在bind()方法中调用其getSingleton()方法得到单例,并修改INITIALIZATION_STATE状态,至此完成日志框架的绑定。

private final static void bind() { if (!isAndroid()) { staticLoggerBinderPathSet = findPossibleStaticLoggerBinderPathSet(); reportMultipleBindingAmbiguity(staticLoggerBinderPathSet); } StaticLoggerBinder.getSingleton();//看这里 INITIALIZATION_STATE = SUCCESSFUL_INITIALIZATION; reportActualBinding(staticLoggerBinderPathSet); ··· }

最后附上slf4j-api-1.7.25.jar和logback-classic-1.2.3.jar的目录结构供参考:

log4j与logback包冲突原因及解决,不可忽视的Warning

log4j与logback包冲突原因及解决,不可忽视的Warning

解决方案

分析了原因,那么解决方案自然很简单,就是剔除不需要的依赖包,此处就是在kafka的依赖中剔除slf4j-log4j12。maven项目中可以通过exclusions标签来完成。

<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.11</artifactId> <version>0.10.0.1</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>

本文就简单分析了日志加载绑定的过程,如有遗漏请不吝指出。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsfpg.html