簡體   English   中英

如何從外部 Maven 依賴項禁用 Log4j 配置?

[英]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 嘗試通過按下一個順序在類加載器中搜索類來初始化日志記錄系統:

  1. 嘗試加載 Log4j(如果 slf4j 可用加載 slf4j 橋)
  2. 嘗試加載 Log4j
  3. 嘗試加載 slf4j
  4. 加載 java util 日志記錄

此處提供完整邏輯: github spring 源代碼

之后 Spring 引導開始配置記錄器(使用LoggingApplicationListener )。 在此階段 Spring 使用配置文件和類路徑中的可用記錄器啟動配置記錄器。 在您的情況下,其中一個依賴項使用logback-classic作為依賴項,因此它在運行時可用於 springboot,這就是它使用logback-classic的原因。

有幾種可能的方法可以解決您的問題:

  1. 遷移到logback-classic並在您的項目中使用它(最好)
  2. 如果很難將log4j2更改為logback-classic ,則可以同時支持它們(對於來自log4j2.xml的代碼配置,將使用logback.xml將用於 spring)。 有必要將logging.config配置添加到application.properties ,其中包含自定義logback.xml的路徑 - 文檔
  3. 如果你想使用log4j2作為 springboot 本身的記錄器,有必要從你的依賴中排除logback-classic (它會導致依賴問題,使用它)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM