1、问题复现:
之前在SpringBoot中配置整合了log4j2,今天在pom文件中,导入新的依赖(依赖如下)之后,
<dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.26.7</version> </dependency>
重启SpringBoot项目时,出现如下错误:
Exception in thread "main" java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.apache.logging.slf4j.Log4jLoggerFactory loaded from file:/D:/00_Develop_Install/Maven/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.12.1/log4j-slf4j-impl-2.12.1.jar). If you are using WebLogic you will need to add ‘org.slf4j‘ to prefer-application-packages in WEB-INF/weblogic.xml: org.apache.logging.slf4j.Log4jLoggerFactory at org.springframework.util.Assert.instanceCheckFailed(Assert.java:696) at org.springframework.util.Assert.isInstanceOf(Assert.java:596) at org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext(LogbackLoggingSystem.java:281) at org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize(LogbackLoggingSystem.java:104) at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:239) at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:220) at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127) at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:70) at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:47) at org.springframework.boot.SpringApplication.run(SpringApplication.java:305) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) at com.pactera.attd.AttdApplication.main(AttdApplication.java:12)
在网上查找相关资料,大部分都是说要 排除SpringBoot默认的logback依赖,但是这个问题,我在整合时,已经去除掉了,所以,很显然不是这个问题。后来,看来篇文章说是,pom文件依赖中的顺序问题,后来就调整了一下顺序,然后重启,报了以下错误(报错信息太多,这里只截取了主要部分)。
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/00_Develop_Install/Maven/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/D:/00_Develop_Install/Maven/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.12.1/log4j-slf4j-impl-2.12.1.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] Logging system failed to initialize using configuration from ‘classpath:log4j2.xml‘...
2、问题解决
仔细查看了这次报错的信息,大致意思是说,日志系统出现了多jar包冲突,由于我使用的是log4j2,结果显示还有一个logback的jar包,于是顺着这个问题,查看了一下项目所引jar包,发现了多了以下红框中所展示的jar包,将所引入坐标注释掉,此jar包则没有了,如下图所示。
引入坐标后:
注释坐标后:
这下,很明显就知道了原因,也就是说,自己新导入的pom坐标,并未将此jar包排除掉,导致出现了多jar包,既然这样,看来跟新引入的pom坐标的顺序也没关系了,只需要将原先的logback-classic排除掉即可,于是,就在引入的pom坐标下添加了如下排除的依赖。
<exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions>
前后依赖对比,如图。
解决前:
解决后:
注意:groupId和artifactId一定要写正确,并对应的依赖里面。
然后,重新build项目,发现冲突的jar包,没有了,之后重启SpringBootApplication,项目正常启动,问题解决。
原文地址:https://www.cnblogs.com/cndarren/p/12054224.html
时间: 2024-10-10 14:09:34