Apache 如何让log4j.properties读取环境变量?

Apache 如何让log4j.properties读取环境变量?,apache,logging,clojure,log4j,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.P

我的应用程序有多个环境(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.
但我希望它看起来像这样:

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

您也可以尝试一种模式,它已经成为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
项目.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
概要文件,您可能希望同时指定
dev
test
路径。

您还可以尝试一种模式,该模式已成为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
项目.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"]}}

对于
测试
配置文件,您可能希望同时指定
dev
test
路径。

您检查了吗?log4j的哪个版本?我使用的版本是:1.2.17。可能重复我在22296275中尝试了建议,但这并没有解决我的问题。您检查了吗?log4j的哪个版本?我使用的版本是:1.2.17。可能重复我尝试了22296275中的建议,但这并没有解决我的问题。