一 背景
一個項目在不同的環境中運行時可能有不同日志輸出路徑,比如在開發環境是一個命名空間,在測試環境又是另外一個命名空間,在生產環境又是另外一個命名空間,尤其是容器化服務之后,日志輸出路徑經常隨命名空間變動而變,但是使用的是同一個日志配置文件,所以需要日志路徑隨命名空間不同而變。
二 log4j2日志文件配置
1 查閱大量資料都跟我使用的不一樣,不說版本都是流氓,先說使用的日志及版本
這個是springboot集成的log4j依賴, 直接引入即可
2 配置文件
多次啟動springboot項目均無法獲取到變量,其在日志文件夾創建了一個${browser.log.namespace}文件夾日志目錄,
手動在代碼或者jvm啟動參數里面設置變量,也均無法獲取到
生成文件和原來一樣,依舊無法生成文件。
然后再繼續修改配置文件
當配置前加sys時,獲取不到變量就會報錯,但是項目依舊可以啟動,日志不會輸出到文件,控制台會又打印。
加上sys了之后在jvm參數配置或者在代碼里面用system設置進去之后,日志文件均可以獲取到這個變量
系統變量很麻煩,再進一步看看能不能使用環境變量
先把k8s容器里面系統變量和環境變量打印出來
發現應用可以獲取到容器的環境變量
修改日志文件
日志配置文件可以正常獲取系統變量
log4j2組件加載驗證是不能從apollo直接獲取配置的命名空間,但是log4j配置文件可以從系統變量和環境變量里面獲取
a在系統變量里面獲取需要加前綴sys:
b 在系統變量里面獲取需要加 env: