日志jar包冲突报错:Class path contains multiple SLF4J bindings

日志jar包冲突报错:Class path contains multiple SLF4J bindings

  问题现象:tomcat启动卡死,报错日志如下:

复制代码
十一月 07, 2017 8:35:45 下午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring root WebApplicationContext
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/E:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/ms-notify/WEB-INF/lib/log4j-slf4j-impl-2.9.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/E:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/ms-notify/WEB-INF/lib/slf4j-log4j12-1.7.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 [org.apache.logging.slf4j.Log4jLoggerFactory]
复制代码

  问题定位:从日志里看到两个日志jar包冲突了:log4j-slf4j-impl-2.9.1.jar和slf4j-log4j12-1.7.2.jar

  解决问题:根据日志给出的本地tomcat路径,进入到lib下,删除其中一个,这里进入E:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/ms-notify/WEB-INF/lib,删除log4j-slf4j-impl-2.9.1.jar,重启即可。

 

### 解决SLF4J日志绑定冲突问题 当遇到“SLF4J: Class path contains multiple SLF4J bindings”的警告时,表明项目中的类路径下存在多个不同版本或类型的SLF4J绑定。这会使得SLF4J无法确定具体使用哪一个日志实现框架来记录日志消息。 #### 方法一:手动删除多余的绑定文件 对于某些环境配置,可以直接通过命令行工具移除不必要的日志库依赖项。例如,在HBase环境中可以执行以下操作: ```bash rm -f /usr/local/hadoop/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar ``` 这种方法适用于那些不需要特定日志实现的情况,并且能够快速解决问题[^3]。 #### 方法二:调整Maven/Gradle构建配置 如果是在基于Maven或Gradle管理依赖关系的应用程序中,则可以通过修改`pom.xml`或者`build.gradle`文件的方式排除掉不希望引入的日志实现模块。比如在Spring Boot应用里,可以在POM文件中加入如下片段以防止加载默认自带的logback之外其他形式的日志组件: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 排除此处指定的slf4j-log4j12 --> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> ``` 这样做不仅解决了当前的问题,还提高了项目的可维护性和清晰度[^4]。 #### 方法三:检查并清理Classpath上的重复条目 有时可能是由于不小心将相同的库多次添加到了classpath上所造成的。此时应该仔细审查整个工程结构以及第三方插件设置,确保每个必要的日志接口只被引用一次。同时也可以借助IDE内置的功能来进行辅助排查工作。 总之,处理此类问题的关键在于理解自己的应用程序究竟需要什么样的日志解决方案,从而有针对性地采取措施去除冗余部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值