首页 > 技术文章 > springboot项目log4j2启动报错 Logback configuration error detected

snail90 2019-08-09 15:45 原文

1 pom.xml增加配置:

 

    <!-- 引入log4j2依赖 -->
    <dependency> 
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>

 

 

 

 

 

2 配置文件xxx.properties添加log4j2的配置

logging.config=classpath:log4j2.xml

 

错误提示

java.lang.IllegalStateException: Logback configuration error detected:

  ....省略1W字母

 

上面的pom文件是最初报错时的配置文件,看上面的配置文件貌似没有问题,我们需使用log4j2日志的starter也已经引入了,但是这里我们需要注意一点就是我们在引入spring-boot-starter-web包的时候他里面默认使用了logback日志,这样就会产生日志包的冲突,其实不只是starter-web包默认引入的logback还有很多的包默认引入的logback包,看下图

 

上图中是这个pom文件的jiar包结构示意图,log4j2部分就是我们新引入的spring-boot-starter-log4j2包,上图中我通过黄线画出了现在系统中所有logback的引入,可以看出所有引用,这里涉及到几个包,分别是web包,mybatis包,jdbc包。那我们现在要解决jar包冲突的问题是不是需要每个包下都排除默认引用的logger日志呢,理论上是完全没有问题的。


解决办法

1.统一排除

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
                    

2 如果只用到web包(没有引用spring-boot-starter)

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

看见第二个解决办法,问题是不是来了。很多包都默认使用的logback,你单独排除了web包是不是还会出现这个问题,
答 : 是的会出现,这里就需要知道pom文件的加载顺序了,pom文件的加载顺序也是从上至下执行,那么我们就需要把web包放到pom文件中的第一位,在向下执行的时候也会排除所有的默认logger了。

 

推荐阅读