log4j2配置文件動態獲取容器環境變量


一 背景

一個項目在不同的環境中運行時可能有不同日志輸出路徑,比如在開發環境是一個命名空間,在測試環境又是另外一個命名空間,在生產環境又是另外一個命名空間,尤其是容器化服務之后,日志輸出路徑經常隨命名空間變動而變,但是使用的是同一個日志配置文件,所以需要日志路徑隨命名空間不同而變。

二 log4j2日志文件配置

1 查閱大量資料都跟我使用的不一樣,不說版本都是流氓,先說使用的日志及版本

 

 

 

這個是springboot集成的log4j依賴, 直接引入即可

2 配置文件

 

 

 

多次啟動springboot項目均無法獲取到變量,其在日志文件夾創建了一個${browser.log.namespace}文件夾日志目錄,

 

 

 

手動在代碼或者jvm啟動參數里面設置變量,也均無法獲取到

 

 

 

 

 

 

生成文件和原來一樣,依舊無法生成文件。

然后再繼續修改配置文件

 

 

 

當配置前加sys時,獲取不到變量就會報錯,但是項目依舊可以啟動,日志不會輸出到文件,控制台會又打印。

加上sys了之后在jvm參數配置或者在代碼里面用system設置進去之后,日志文件均可以獲取到這個變量

 

 

 

系統變量很麻煩,再進一步看看能不能使用環境變量

先把k8s容器里面系統變量和環境變量打印出來

 

 

 

 

 

 

發現應用可以獲取到容器的環境變量

修改日志文件

 

 

 

日志配置文件可以正常獲取系統變量

log4j2組件加載驗證是不能從apollo直接獲取配置的命名空間,但是log4j配置文件可以從系統變量和環境變量里面獲取

a在系統變量里面獲取需要加前綴sys:

b 在系統變量里面獲取需要加 env:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM