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


    一 背景

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

    二 log4j2日志文件配置

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

     

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

    2 配置文件

     

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

     

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

     

     

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

    然后再继续修改配置文件

     

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

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

     

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

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

     

     

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

    修改日志文件

     

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

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

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

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

  • 相关阅读:
    安富莱周报摘录
    关于MQTT:
    JavaScript高级用法三之浏览器对象
    编写高性能Web应用程序的10个技巧
    JavaScript高级用法二之内置对象
    JavaScript高级用法一之事件响应与网页交互
    eval、json.parse()的介绍和使用注意点
    史上最详细的JavaScript事件使用指南
    Image Lazy Load:那些延时加载图片的开源插件(jQuery)
    不要去管浏览器兼容
  • 原文地址:https://www.cnblogs.com/yanhuahayi/p/14297615.html
Copyright © 2020-2023  润新知