log4j2配置文件动态获取容器环境变量

一 背景

一个项目在不同的环境中运行时可能有不同日志输出路径,比如在开发环境是一个命名空间,在测试环境又是另外一个命名空间,在生产环境又是另外一个命名空间,尤其是容器化服务之后,日志输出路径经常随命名空间变动而变,但是使用的是同一个日志配置文件,所以需要日志路径随命名空间不同而变。

二 log4j2日志文件配置

1 查阅大量资料都跟我使用的不一样,不说版本都是流氓,先说使用的日志及版本

 

这个是springboot集成的log4j依赖, 直接引入即可

2 配置文件

 

多次启动springboot项目均无法获取到变量,其在日志文件夹创建了一个${browser.log.namespace}文件夹日志目录,

 

手动在代码或者jvm启动参数里面设置变量,也均无法获取到

 

 

生成文件和原来一样,依旧无法生成文件。

然后再继续修改配置文件

 

当配置前加sys时,获取不到变量就会报错,但是项目依旧可以启动,日志不会输出到文件,控制台会又打印。

加上sys了之后在jvm参数配置或者在代码里面用system设置进去之后,日志文件均可以获取到这个变量

 

系统变量很麻烦,再进一步看看能不能使用环境变量

先把k8s容器里面系统变量和环境变量打印出来

 

 

发现应用可以获取到容器的环境变量

修改日志文件

 

日志配置文件可以正常获取系统变量

log4j2组件加载验证是不能从apollo直接获取配置的命名空间,但是log4j配置文件可以从系统变量和环境变量里面获取

a在系统变量里面获取需要加前缀sys:

b 在系统变量里面获取需要加 env:

原文地址:https://www.cnblogs.com/yanhuahayi/p/14297615.html