問題描述
使用 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.