当前位置:  开发笔记 > 编程语言 > 正文

在log4j xml配置中使用系统环境变量

如何解决《在log4jxml配置中使用系统环境变量》经验,为你挑选了3个好方法。

是否可以在log4j xml配置文件中引用系统环境变量(而不是Java系统属性)?

我希望能够做到这样的事情:


并从系统环境变量中获取它,因此我可以避免使用-D参数传递这么多东西.



1> Einar..:

我最近试图这样做,但无法让它发挥作用.我最终做的是在启动时发送一个变量.所以说你有一个名为$ LOG_LEVEL的环境变量:


并在启动时......

java -Dlog_level=$LOG_LEVEL your_app


我特意问过如何做*没有*必须将它们全部设置为-D参数,所以这根本不能回答我的问题.

2> Shoham..:

此语法仅在log4j 2.X中记录,因此请确保使用的是正确的版本.它不适用于1.X版本.

    
    
        
            %d %p %c{1.} [%t] %m %ex%n
        
    


您还可以使用以下语法指定默认值`$ {env:LOG_PATH: - /default/path}`如果未设置`LOG_PATH`,将使用`/ default/path`.

3> Martin Probs..:

我认为这不受支持,但基本上你可以做两件事来引入你的环境变量:

    在配置Log4J之前使用System.setProperty

    将(您的)环境变量转换为启动器中的系统属性

第一个选项基本归结为:

for (Map.Entry entry : System.getenv().entrySet()) {
  System.setProperty(entry.getKey(), entry.getValue());
}

...但问题当然是放置此代码的位置.特别是如果您在某种Tomcat容器或类似容器中运行,这可能会很麻烦.

另一个很大程度上取决于您的环境.基本上,如果您有一个启动应用程序的shell脚本,您可以编写一些shell魔术来将所有环境变量设置为属性,或者只是您需要的那些,例如:

java -DMY_ENV=$MY_ENV -DMY_OTHER_ENV=$MY_OTHER_ENV -cp ... com.example.Main

也可以更改服务器启动脚本以支持此功能,例如catalina.sh或类似功能.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有