簡體   English   中英

如何將 log4j.xml 用於 spring boot + log4j2 依賴

[英]How to use log4j.xml for spring boot + log4j2 dependency

我有一個帶有自定義附加程序的log4j.xml ,例如:

    <appender name="console" class="com.example.MyAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%m (%c{1}:%L)"/>
        </layout>
    </appender>

最近我將log4j依賴升級到log4j2 ,但仍然使用這個log4j.xml並且它有效。

現在,我在我的項目中添加了一個 Spring 引導模塊。 Spring doc之后,我將pom.xml設置為

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
            <version>2.6.4</version>
        </dependency>

我還為此添加了 arguments -Dlogging.config=log4j.xml -Dlog4j.configuration=log4j.xml -Dlog4j1.compatibility=true

但是我的 Spring 應用程序顯示錯誤並且沒有日志 output:

錯誤 StatusLogger Unknown object org.apache.logging.log4j.core.config.LoggerConfig 類型的“記錄器”被忽略:嘗試將其嵌套在以下之一中:[“Appenders”、“Loggers”、“Properties”、“Scripts”、“自定義級別”]。

似乎log4j2 lib 無法識別log4j.xml ,這意味着-Dlog4j1.compatibility=true我認為不適用於 Spring Boot。

可以使用任何相關配置或任何解決方法嗎? 謝謝。

TL;DR:問題是 Log4j2 有兩個 XML 配置工廠(用於 Log4j 1.x 和 Log4j 2.x 格式),2.x 格式具有更高的優先級。 您需要顯式設置ConfigurationFactory以使用:

-Dlog4j2.configurationFactory=org.apache.log4j.xml.XmlConfigurationFactory

當一個 Spring Boot 應用程序啟動時,Log4j2 配置了兩次:

  • 一開始使用Log4j2自動配置 對於這一輪,您只需要設置-Dlog4j1.compatibility=true並調用配置文件log4j.xml以不同方式調用文件並設置-Dlog4j.configuration

  • 當 Spring 的環境准備就緒時,Spring 僅使用 Log4j2 自動配置的一個子集以編程方式重新配置 Log4j2。 這就是為什么這個階段需要很多手動設置:

    • -Dlogging.config=log4j.xml :Spring 不查找名為log4j.xml的文件,
    • -Dlog4j1.compatibility=true激活 Log4j 1.x 配置工廠,
    • -Dlog4j2.configurationFactory=org.apache.log4j.xml.XmlConfigurationFactory增加 Log4j 1.x XML 配置工廠的優先級。

備注:使用本機 Log4j 1.x 自定義附加程序會使您面臨原始 Log4j 1.x 的所有問題(同步和性能)。 例如 Log4j 1.x 在重新配置期間丟失事件(如 Spring Boot 執行的事件),而 Log4j 2.x 則不會。

暫無
暫無

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

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