我的应用程序有多个环境(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.
答案 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
个人资料,您可能希望同时指定dev
和test
个路径。