【问题标题】:How do I get log4j.properties to read environment variables?如何让 log4j.properties 读取环境变量?
【发布时间】:2018-07-01 06:03:51
【问题描述】:

我的应用程序有多个环境 (dev/qa/prod)。因此,我想根据环境来区分日志转换模式。我有一个 env 变量集,它存储应用程序正在运行它的环境。但是,如何让 log4j.properties 读取这个环境变量?

这是我当前的属性文件的样子:

log4j.rootLogger = INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= [%d{yyyy-MM-dd HH:mm:ss}] my-api.%-5p: %m%n

我已尝试遵循 log4j 查找文档,但这仍然不包括我的日志文件中的环境。

log4j.appender.stdout.layout.ConversionPattern= [%d{yyyy-MM-dd 
 HH:mm:ss}] ${env:ENVIRONMENT}-my-api.%-5p: %m%n

输出如下所示:

[2018-01-22 14:17:20] -my-api.INFO : some-message.

但我希望它看起来像这样:

[2018-01-22 14:17:20] dev-my-api.INFO : some-message.

【问题讨论】:

标签: apache logging clojure log4j


【解决方案1】:

您也可以尝试在 Luminus 和其他框架中已成为某种标准的模式。您创建一个env 目录,其中包含prod/dev/test 子文件夹以及一些额外的代码和资源。在您的 lein 项目中,对于每个配置文件,除了默认路径之外,您还指定在哪里可以找到这些文件。

因此,您获得了三种不同的日志设置。根据您在做什么,它们中的每一个都将被加载。开发代码时——来自env/dev/resources/log4j.properties 和运行测试——来自env/test/resources/log4j.properties

这是一个例子:

$ tree env
.
├── dev
│   └── resources
│       └── log4j.properties
├── prod
│   └── resources
│       └── log4j.properties
└── test
    └── resources
        └── log4j.properties

来自project.clj的一些位:

  :profiles {:dev {:plugins [[autodoc/lein-autodoc "1.1.1"]]
                   :dependencies [[org.clojure/clojure "1.8.0"]
                                  [log4j/log4j "1.2.17"]]
                   :resource-paths ["env/dev/resources"]}}

对于test 配置文件,您可能需要同时指定devtest 路径。

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2015-08-29
    • 2015-05-18
    • 1970-01-01
    • 2014-04-13
    • 2012-08-11
    相关资源
    最近更新 更多