【maven相关问题】SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/D:
SLF4J 是一个简单日志门面(Simple Logging Facade for Java),它提供了统一的日志接口,并允许开发人员在应用程序中使用不同的日志实现(如 Logback、Log4j 等)。2. 排除冲突的库:如果你使用的构建工具是 Maven 或 Gradle,可以在相关的依赖声明中排除冲突的库。3. 解决冲突的绑定:如果你确实需要同时使用两个绑定库,可以尝试解决冲突。具体的排除操
一、问题描述
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/apache-maven-3.6.3/repository/ch/qos/logback/logback-classic/1.2.11/logback-classic-1.2.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/apache-maven-3.6.3/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.17.2/log4j-slf4j-impl-2.17.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
二、原因分析
这个警告信息 SLF4J: Class path contains multiple SLF4J bindings.
表示在类路径中存在多个 SLF4J 绑定。具体的警告信息还显示了找到的两个绑定,分别是来自 logback-classic-1.2.11.jar
和 log4j-slf4j-impl-2.17.2.jar
这两个库。
SLF4J 是一个简单日志门面(Simple Logging Facade for Java),它提供了统一的日志接口,并允许开发人员在应用程序中使用不同的日志实现(如 Logback、Log4j 等)。然而,当类路径中存在多个 SLF4J 绑定时,就会发生冲突。
解决这个问题有以下几种方法:
1. 移除多余的 SLF4J 绑定:根据警告信息中提供的链接 [http://www.slf4j.org/codes.html#multiple_bindings](http://www.slf4j.org/codes.html#multiple_bindings)
,了解更多关于多个绑定引起的问题和解决方法。尝试从项目的依赖中移除一个 SLF4J 绑定。
2. 排除冲突的库:如果你使用的构建工具是 Maven 或 Gradle,可以在相关的依赖声明中排除冲突的库。例如,使用 Maven 的排除示例如下:
<dependency>
<groupId>group-id</groupId>
<artifactId>artifact-id</artifactId>
<version>version</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
具体的排除操作根据你的项目和依赖配置而异,请根据实际情况进行调整。
3. 解决冲突的绑定:如果你确实需要同时使用两个绑定库,可以尝试解决冲突。根据警告信息显示的内容,实际的绑定类型是 ch.qos.logback.classic.util.ContextSelectorStaticBinder
。你可以尝试在配置文件中指定具体的绑定类型,以解决冲突。
例如,在 Logback 的配置文件(如 logback.xml
)中添加以下配置:
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<contextSelector class="ch.qos.logback.classic.selector.DefaultContextSelector">
<contextName>default</contextName>
</contextSelector>
<!-- 其他配置 -->
</configuration>
三、错误原因
在terminal输入命令
mvn dependency:tree
查看造成冲突的jar包
四、解决方案
删除log4j的依赖即可,重新启动项目成功,无错误信息提示。
参考
Class path contains multiple SLF4J bindings.问题原因及解决方案-CSDN博客
更多推荐
所有评论(0)