maven相关问题SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/D:

一、问题描述

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.jarlog4j-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博客