log4j2配置文件动态获取容器环境变量
一 背景
一个项目在不同的环境中运行时可能有不同日志输出路径,比如在开发环境是一个命名空间,在测试环境又是另外一个命名空间,在生产环境又是另外一个命名空间,尤其是容器化服务之后,日志输出路径经常随命名空间变动而变,但是使用的是同一个日志配置文件,所以需要日志路径随命名空间不同而变。
二 log4j2日志文件配置
1 查阅大量资料都跟我使用的不一样,不说版本都是流氓,先说使用的日志及版本
这个是springboot集成的log4j依赖, 直接引入即可
2 配置文件
多次启动springboot项目均无法获取到变量,其在日志文件夹创建了一个${browser.log.namespace}文件夹日志目录,
手动在代码或者jvm启动参数里面设置变量,也均无法获取到
生成文件和原来一样,依旧无法生成文件。
然后再继续修改配置文件
当配置前加sys时,获取不到变量就会报错,但是项目依旧可以启动,日志不会输出到文件,控制台会又打印。
加上sys了之后在jvm参数配置或者在代码里面用system设置进去之后,日志文件均可以获取到这个变量
系统变量很麻烦,再进一步看看能不能使用环境变量
先把k8s容器里面系统变量和环境变量打印出来
发现应用可以获取到容器的环境变量
修改日志文件
日志配置文件可以正常获取系统变量
log4j2组件加载验证是不能从apollo直接获取配置的命名空间,但是log4j配置文件可以从系统变量和环境变量里面获取
a在系统变量里面获取需要加前缀sys:
b 在系统变量里面获取需要加 env: