springboot項目log4j2啟動報錯 Logback configuration error detected


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了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM