如何获取log4j.properties来读取环境变量?

时间:2018-01-22 14:58:44

标签: apache logging clojure log4j

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

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

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.

1 个答案:

答案 0 :(得分:3)

您也可以尝试在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个路径。