使用 Spring 的依賴於配置文件的 log4j2 配置 (Profile-dependent log4j2 configuration with Spring)


問題描述

使用 Spring 的依賴於配置文件的 log4j2 配置 (Profile‑dependent log4j2 configuration with Spring)

我正在嘗試在帶有 Gradle 的 Spring Boot 應用程序中使用 log4j2。我有 4 個不同的配置文件:it、dev、mac、was。相應地,我有 4 個不同的 log4j2 配置文件:log4j2‑it.xml、log4j2‑dev.xml、log4j2‑mac.xml、log4j2‑was.xml。根據所選配置文件,我想選擇正確的 log4j2 配置文件,以便對其進行相應配置。

首先,為了讓 log4j2 正常工作,我排除了 spring‑boot‑starter‑日誌記錄 並包含而不是 spring‑boot‑starter‑log4j2。在這樣做之前,log4j2 根本不起作用。

我查看了這篇文章,但我無法得到公認的答案。根據 這篇文章,設置 logging.config 屬性將不起作用。此外,我的項目沒有啟動腳本,因此我無法使用 ‑D 標誌傳遞參數。

我已經能夠通過添加來選擇其中一個配置文件log4j2.component.properties 文件並指定要在其中使用的配置文件 (看這裡),但是我還沒有找到一種方法來使這個配置文件依賴。

另外,如果我有一個文件名為 log4j2. xml, 這是按預期發現和加載的。

經過大量搜索,我看到了一堆 logback 的解決方案,並嘗試了他們是否可以使用 log4j2,但不出所料,這些都沒有成功。

我有辦法做到這一點嗎?例如,在運行測試時,選擇了 it 配置文件,並且應該使用 log4j2‑it.xml 文件來配置日誌記錄。也許我錯過了一些東西,因為我希望配置文件特定的 log4j2 配置應該是可能的,但到目前為止我還沒有找到任何有效的東西。

但不出所料,這些都沒有成功。

我有辦法做到這一點嗎?例如,在運行測試時,選擇了 it 配置文件,並且應該使用 log4j2‑it.xml 文件來配置日誌記錄。也許我錯過了一些東西,因為我希望配置文件特定的 log4j2 配置應該是可能的,但到目前為止我還沒有找到任何有效的東西。

但不出所料,這些都沒有成功。

我有辦法做到這一點嗎?例如,在運行測試時,選擇了 it 配置文件,並且應該使用 log4j2‑it.xml 文件來配置日誌記錄。也許我錯過了一些東西,因為我希望配置文件特定的 log4j2 配置應該是可能的,但到目前為止我還沒有找到任何有效的東西。


參考解法

方法 1:

I ended up adding a @Component with a @PostConstruct method wherein I did

LoggerContext context = (LoggerContext)LogManager.getContext(false);
context.setConfigLocation(URI.create("path to file"));
context.reconfigure();

Thanks to alan7678's answer here.

(by knueserknueser)

參考文件

  1. Profile‑dependent log4j2 configuration with Spring (CC BY‑SA 2.5/3.0/4.0)

#log4j2 #spring-boot #spring






相關問題

Làm cách nào để thêm phần phụ Log4J2 vào thời gian chạy theo chương trình? (How to add Log4J2 appenders at runtime programmatically?)

使用 Spring 和 Log4j2 的 Classloader-Leak (Classloader-Leak with Spring and Log4j2)

log4j2 RolllingFileAppender filePattern 創建日期錯誤 (log4j2 RolllingFileAppender filePattern create a wrong date)

將時間戳添加到日誌文件名時出錯 (log4j2) (Error adding timestamp to log file name (log4j2))

log4j2 - 以編程方式更改 RollingFileAppender 的最大文件大小 (log4j2 - programmatically change max file size of RollingFileAppender)

log4j 沒有登錄到文件或控制台 (log4j is not logging into file or console)

Log4j2 未在 Linux 中使用 Spring Boot 創建日誌文件 (Log4j2 not creating log file with Spring Boot in Linux)

application.properties 中的外部 log4j2.xml 文件路徑 (External log4j2.xml file path in application.properties)

使用 Spring 的依賴於配置文件的 log4j2 配置 (Profile-dependent log4j2 configuration with Spring)

從 log4j2.xml 訪問環境變量 (Accessing environment variable from log4j2.xml)

Spring Boot 應用程序中的內部 tomcat 停止響應調用 (internal tomcat inside spring boot application stops responding to calls)

如何在 mule 應用程序中實現 log4j2 (2.14.0) 'JSON 模板佈局'? (How can I implement log4j2 (2.14.0) 'JSON Template Layout' in a mule application?)







留言討論