Springboot啟動logback與slf4j的jar衝突
使用Maven管理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
該異常的原因是Springboot本身使用logback列印日誌,但是專案中其他的元件依賴了slf4j,這就導致了logback與slf4j的jar包之間出現了衝突,這種情況下,有兩種解決方式:
1,去除slf4j,繼續使用lagback
這種方式需要在pom.xml檔案中找到所有依賴了slf4j的元件,在<dependency>中使用<exclusions>排除slf4j的依賴
2,去除logback,改為使用slf4j
pom.xml去掉,同時去掉沒有用的配置檔案logback-spring.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusions>
</dependency>
使用log4j或者slf4j的方式列印日誌,別忘記了配置檔案log4j.properties
具體選擇那種方式要根據少數服從多數的原則,如果很多元件都依賴了slf4j,那麼就選擇使用slf4j,去掉logback
相反,如果自有個別組件依賴了slf4j,可以排除slf4j,繼續使用logback。