背景
將 -Dlog4j.debug 添加到IDEA的類的啟動配置中
運行上圖代碼,這里log4j2.xml控制的日志級別是info,很明顯是沒生效。
DEBUG StatusLogger org.slf4j.helpers.Log4jLoggerFactory is not on classpath. Good!
DEBUG StatusLogger Using ShutdownCallbackRegistry class org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry
WARN StatusLogger Multiple logging implementations found:
Factory: org.apache.logging.log4j.core.impl.Log4jContextFactory, Weighting: 10
Factory: org.apache.logging.slf4j.SLF4JLoggerContextFactory, Weighting: 15
Using factory: org.apache.logging.slf4j.SLF4JLoggerContextFactory
分析
警告信息顯示檢測到多個日志實現,權重分別為10和15。
最終選擇了權重較高的org.apache.logging.slf4j.SLF4JLoggerContextFactory 作為日志的實現工廠。
現在需要讓應用程序使用 Log4jContextFactory 而不是 SLF4JLoggerContextFactory 作為日志的實現工廠。因此需要檢查依賴關系,移除沖突的依賴項(這里需要處理的依賴項是log4j-to-slf4j)。
處理
這里需要處理的是spring-boot-starter-web依賴中的log4j-to-slf4j。
<exclusions><exclusion><artifactId>log4j-to-slf4j</artifactId><groupId>org.apache.logging.log4j</groupId></exclusion>
</exclusions>
驗證
運行代碼沒問題,配置的日志文件也有內容了。