簡體   English   中英

log4j2如何使用多個配置文件

[英]How to use multiple configuration files for log4j2

我正在編寫測試 Java 庫的 Java 代碼。 該庫包含自己的 log4j2 配置作為分發的一部分。

我想在我的測試代碼中使用 log4j2 而不修改庫的配置。

有沒有辦法為我的測試代碼設置單獨的 log4j2 配置?

這一切都作為命令行 Java 運行,根本沒有服務器或 Web 參與。

編輯以嘗試更清楚:我想要的是能夠配置記錄器、附加器等以供測試代碼使用,同時讓庫代碼使用其自己單獨的配置文件進行日志記錄。 這個想法是在我的測試代碼中使用 log4j2,但不必更改庫的配置文件。 由於庫配置文件是庫發行版的一部分,我不想為了測試而更改它。

這可能會有所幫助:

  • Log4j2 將首先在類路徑中查找 log4j2-test.xml
  • 如果未找到該文件,它將在類路徑中查找 log4j2.xml

因此,一種選擇是將庫的配置(log4j2.xml)復制到 log4j2-test.xml 並將您自己的配置添加到 log4j2-test.xml。

此外,Log4j2支持 XML 配置中的 XInclude ,因此您可以使用該功能來避免在 log4j2-test.xml 中復制庫的配置。

Log4j2 支持完全符合您要求的“復合配置”。 您需要做的就是在log4j.configurationFile屬性中提供多個文件的路徑。 這可以從命令行傳遞或添加到應用程序中的log4j2.component.properties文件中。

參考資料: https : //logging.apache.org/log4j/2.x/manual/configuration.html#CompositeConfiguration https://logging.apache.org/log4j/2.x/manual/configuration.html#SystemProperties

您可以嘗試通過兩個步驟來解決您的問題

  • 使用您的自定義名稱創建您自己的配置文件(例如:xyz.properties/.xml)
  • 您必須將以下行添加到您的 java 運行時命令

cmd> java -Dlog4j.configuration=location/xyz.properties

如果您使用不同的名稱進行配置而不是 log4j.properties/.xml 文件,您需要在運行時通過上述命令配置該文件以獲取更多信息,請查看此處..

將備用 XML 文件用於 log4j2.xml 的正確格式:

java -Dlog4j.configurationFile=./location/log4j2-custom.xml

假設./location/log4j2-custom.xml存在並且是在此運行中替換 log4j2.xml 的新 XML

請參閱: https : //github.com/kamalcph/Log4j2Examples/blob/master/src/main/java/in/co/nmsworks/log4j2/examples/CompositeConfigurationExample.java

參考https://logging.apache.org/log4j/2.x/manual/configuration.html指出您可以在 log4j2.configurationFile 屬性下添加多個逗號分隔的文件。

要使用多個配置文件,您必須根據環境進行設置。

例如:

if (env.equals("DEV")) {
 setConfigFile("log4j2-dev.xml");
}

public static void setConfigFile(String logConfigFile) {
        File file = new File(logConfigFile);
        LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
        context.setConfigLocation(file.toURI());
    }
first configure application.yaml file
spring:
  profiles:
    active: dev

---
spring:
  message: running in the dev profile    //just to output the message in the log
  profiles: dev
logging.config: classpath:log4j2-dev.xml

---
spring:
  profiles: prod
logging.config: classpath:log4j2-prod.xml



and create these similar files in your classpath
* log4j2-dev.xml
* log4j2-prod.xml

暫無
暫無

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

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