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