解决SLF4J: Class path contains multiple SLF4J bindings.

目录

1、分析

2、示例

3、解决


1、分析

SLF4J(Simple Logging Facade for Java)提供了一个Java日志API的简单抽象层,允许最终用户在部署其应用程序时使用他们选择的日志库。当你看到警告信息“SLF4J: Class path contains multiple SLF4J bindings.”,这意味着在你的类路径(class path)中有两个或更多的SLF4J绑定(bindings)存在。

SLF4J绑定是指实现了SLF4J API并将其日志记录请求转发给具体日志框架(如Logback、Log4j、JUL等)的库。当存在多个绑定时,SLF4J不知道应该使用哪一个,因此它会发出警告,并默认选择它找到的第一个绑定,而忽略其他的。这种情况可能导致意料之外的行为,比如日志配置不生效,或者不是预期的日志框架被使用。

原因分析:

  1. 依赖冲突:项目中直接或间接依赖了多个不同的SLF4J实现库,比如同时包含了slf4j-log4j12.jarslf4j-simple.jarlogback-classic.jar等。
  2. 构建工具管理不当:使用Maven或Gradle等构建工具时,没有正确排除或指定依赖范围,导致不同模块引入了不同的SLF4J绑定。
  3. IDE或运行环境配置问题:有时IDE的类路径配置或应用服务器的库配置也会无意中引入额外的绑定。
  4. 手动添加JAR包:手动将不同的SLF4J绑定JAR文件放入项目的类路径中。

解决方法:

  1. 确定并保留一个绑定:根据项目需求,选择一个适合的日志实现(如Logback、Log4j2),然后从类路径中移除其它的SLF4J绑定库。
  2. 使用Maven或Gradle排除依赖:在构建配置中明确排除不需要的绑定。
  3. 检查并清理库依赖:确保没有不必要的库被包含进来,特别是那些作为传递依赖(transitive dependencies)被引入的。
  4. 环境变量或系统属性设置:对于某些特定框架(如上述提到的HBase案例),可以通过设置环境变量或系统属性来避免类路径冲突。
2、示例

ps:

        出现冲突的包可能不一样,自己对着日志排查一下

我出现冲突的是:org.apache.logging.log4j/log4j-slf4j-impl

我这段是演示的Maven,把注释打开就可以排除冲突了. 

<dependency>
    <groupId>org.ofdrw</groupId>
    <artifactId>ofdrw-converter</artifactId>
    <version>1.17.9</version>
    <scope>compile</scope>
    <!--<exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </exclusion>
    </exclusions>-->
</dependency>
3、解决
<dependency>
    <groupId>org.ofdrw</groupId>
    <artifactId>ofdrw-converter</artifactId>
    <version>1.17.9</version>
    <scope>compile</scope>
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </exclusion>
    </exclusions>
</dependency>

排除了发生冲突的包

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值