[英]How to disable Log4j configuration from external Maven dependency?
我有 Spring Boot application with Log4j2 XML 配置文件放在resources/log4j2.xml
中。 我使用的一個外部庫是通過 Maven 依賴項安裝的,並且在logback.xml
中有自己的日志記錄配置。看起來這個文件覆蓋了我的 Log4J2 配置,日志記錄現在由這個配置文件控制。
我以這種方式獲取記錄器實例( org.apache.logging.log4j.Logger
):
private static final Logger LOGGER = LogManager.getLogger(Foo.class);
問:如何從外部庫禁用 Log4J 配置?
編輯 1:添加了 Maven 與 Log4j2 相關的依賴項
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring.boot.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>${spring.boot.version}</version>
</dependency>
不久:
你的問題是 Spring 首先嘗試使用 slf4j (它是logback-classic
的一部分)並且 Spring 得到它,因為 logback 在運行時存在於你的類路徑中。 從依賴項中排除資源文件並非易事。
詳細的:
引擎蓋下的 Spring-JCL 嘗試通過按下一個順序在類加載器中搜索類來初始化日志記錄系統:
此處提供完整邏輯: github spring 源代碼
之后 Spring 引導開始配置記錄器(使用LoggingApplicationListener
)。 在此階段 Spring 使用配置文件和類路徑中的可用記錄器啟動配置記錄器。 在您的情況下,其中一個依賴項使用logback-classic
作為依賴項,因此它在運行時可用於 springboot,這就是它使用logback-classic
的原因。
有幾種可能的方法可以解決您的問題:
logback-classic
並在您的項目中使用它(最好)log4j2
更改為logback-classic
,則可以同時支持它們(對於來自log4j2.xml
的代碼配置,將使用logback.xml
將用於 spring)。 有必要將logging.config
配置添加到application.properties
,其中包含自定義logback.xml
的路徑 - 文檔log4j2
作為 springboot 本身的記錄器,有必要從你的依賴中排除logback-classic
(它會導致依賴問題,使用它)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.