解决java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on 谁借莪1个温暖的怀抱¢ 2024-02-20 12:54 6阅读 0赞 **目录** 解决java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path 问题产生的原因 解决方法 方法一:移除Slf4j的依赖 方法二:移除Log4j的依赖 结论 -------------------- ### 解决`java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path` ### 在使用Java编程的过程中,我们常常会遇到各种各样的错误和异常。其中一个常见的问题是在依赖库中出现了相互冲突的情况,比如在使用日志框架时可能会出现`java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path`的异常。这个异常是由于在项目的依赖中同时存在了`log4j-over-slf4j.jar`和`slf4j-log4j12.jar`这两个不兼容的库引起的。 #### 问题产生的原因 #### 这个问题的根本原因是存在两个不同的日志框架冲突,分别是`Log4j`和`Slf4j`。`Log4j`是一个Java日志框架,而`Slf4j`(Simple Logging Facade for Java)是一个简单的日志门面,它提供了一个统一的API,可以用于不同的日志框架。在某些情况下,我们可能需要使用`Log4j`作为日志框架,但依赖库中同时引入了`Log4j`和`Slf4j`,导致冲突。 #### 解决方法 #### 解决这个问题的方法很简单,我们只需要移除或者排除其中一个库的依赖即可。下面是两种解决方法: ##### 方法一:移除`Slf4j`的依赖 ##### 如果你已经决定使用`Log4j`作为日志框架,可以直接移除或者排除`Slf4j`的依赖。具体方法取决于你的项目构建工具,比如Maven或Gradle。 **使用Maven的排除依赖方法:** 在你的`pom.xml`文件中,找到引入`Slf4j`的依赖项,添加排除依赖配置: xmlCopy code<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version><!-- 版本号 --></version> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> **使用Gradle的排除依赖方法:** 在你的`build.gradle`文件中,找到引入`Slf4j`的依赖项,添加排除依赖配置: groovyCopy codedependencies { implementation('org.slf4j:slf4j-log4j12:版本号') { exclude group: 'log4j', module: 'log4j' } } ##### 方法二:移除`Log4j`的依赖 ##### 如果你已经决定使用`Slf4j`作为日志框架,可以移除或者排除`Log4j`的依赖。 **使用Maven的排除依赖方法:** 在你的`pom.xml`文件中,找到引入`Log4j`的依赖项,添加排除依赖配置: xmlCopy code<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version><!-- 版本号 --></version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> **使用Gradle的排除依赖方法:** 在你的`build.gradle`文件中,找到引入`Log4j`的依赖项,添加排除依赖配置: groovyCopy codedependencies { implementation('org.apache.logging.log4j:log4j-core:版本号') { exclude group: 'org.slf4j', module: 'slf4j-api' } } #### 结论 #### 在使用Java开发过程中,如果遇到`java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path`异常,可以考虑检查项目的依赖中是否存在`Log4j`和`Slf4j`这两个库的冲突。通过移除或排除其中一个库的依赖,可以解决这个问题。在选择移除或排除哪个库的依赖时,需要根据自己的项目需求和使用习惯来决定。希望本文对你解决这个问题有所帮助。 `log4j-over-slf4j.jar`和`slf4j-log4j12.jar`是在使用`SLF4J`(Simple Logging Facade for Java)和`Log4j`作为日志框架时常见的两个jar包。 1. `slf4j-log4j12.jar`是`SLF4J`对`Log4j 1.x`的绑定实现。它实现了`SLF4J`的接口,并将日志消息转发给`Log4j`进行处理。通过使用`slf4j-log4j12.jar`,我们可以在使用`SLF4J`的代码中直接使用`Log4j`作为实际的日志框架。 2. `log4j-over-slf4j.jar`则是反过来的,它是`SLF4J`对`Log4j`的一个桥接实现。它的作用是将原本使用`Log4j`的代码中的日志调用转发到`SLF4J`,然后再由`SLF4J`根据实际的配置绑定到具体的日志实现(比如`Logback`)上。 这两个jar包的存在是为了解决在使用`SLF4J`和`Log4j`组合时可能产生的冲突问题。`SLF4J`是一个轻量级的日志门面,它提供了统一的接口,可以方便地切换底层的日志实现。而`Log4j`是一个功能强大的日志框架,拥有丰富的配置选项和灵活的日志输出方式。 当我们使用`SLF4J`和`Log4j`组合时,可能会出现两个日志框架同时存在于项目中的情况。这样就会导致两个框架之间的冲突,引发一些问题,比如类冲突,导致`java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path`异常。 为了解决这个问题,我们可以选择使用`slf4j-log4j12.jar`来绑定`Log4j 1.x`,或者使用`log4j-over-slf4j.jar`来桥接其他日志实现,如`Logback`。通过选择适合的jar包,可以使我们的代码在使用统一的`SLF4J`接口的同时,能够正常地使用底层的日志实现。
相关 解决java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on 目录 解决java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4 谁借莪1个温暖的怀抱¢/ 2024年02月20日 12:54/ 0 赞/ 6 阅读
相关 UE4 粒子系统问题 no fixed bounding box 问题:“WARNING” this particle system has no fixed bounding box and contgains a GPU emitter Bertha 。/ 2022年07月15日 05:28/ 0 赞/ 150 阅读
相关 UE4 粒子系统问题 no fixed bounding box 问题:“WARNING” this particle system has no fixed bounding box and contgains a GPU emitter 水深无声/ 2022年07月15日 05:28/ 0 赞/ 122 阅读
相关 JUint4测试报错 No thread-bound request found: Are you referring to 听取了论坛老哥的建议:把所有测试功能都自动化起来。所以现在接着练习JUnit4。 今天测试登录功能,核心代码如下: @Autowired UserM r囧r小猫/ 2022年04月10日 02:43/ 0 赞/ 1045 阅读
还没有评论,来说两句吧...