龙空技术网

SpringBoot整合log4j2导入新的依赖出现jar冲突解决

Darren流年 337

前言:

此时看官们对“apache281”大概比较珍视,朋友们都想要学习一些“apache281”的相关资讯。那么小编在网摘上汇集了一些对于“apache281””的相关内容,希望咱们能喜欢,朋友们快快来学习一下吧!

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  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,项目正常启动,问题解决。

标签: #apache281