【发布时间】:2017-05-16 03:26:59
【问题描述】:
我有一个带有 log4j.properties 文件的 scala 项目。我本地的输出文件夹与 dev、QA、prod 中的输出文件夹不同。在进行 SBT 构建时,有没有办法更新此文件的位置。
很久以前我使用过 ant,我们有一个 build.properties 文件,它将根据 build.properties 文件中的值替换属性文件中的值。
【问题讨论】:
我有一个带有 log4j.properties 文件的 scala 项目。我本地的输出文件夹与 dev、QA、prod 中的输出文件夹不同。在进行 SBT 构建时,有没有办法更新此文件的位置。
很久以前我使用过 ant,我们有一个 build.properties 文件,它将根据 build.properties 文件中的值替换属性文件中的值。
【问题讨论】:
1) 当你的应用加载时,根据环境导出变量,
//if dev
System.setProperty("logger_file_name", "my-log-name-for-env-dev");
// so on
2) 或者使用 JVM 选项,
java -Dlogger_file_name=my-log-name-for-env-dev your.package.MainApplication
然后在你的src/main/log4j.properties中,引用系统变量
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${logger_file_name}.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
3) 我更喜欢的第三种方式,原因很明显,
维护一张environment to log file name 的地图,或者只是维护一种方法来了解您所在的环境,然后在加载应用程序时,设置正确的 log4j 配置。
//对于 log4j
val environment = System.getProperty("application.environment");
org.apache.log4j.PropertyConfigurator.configure("src/main/resources/log4j-"+environment+".properties")
//对于log4j2
import org.apache.logging.log4j.core.config.Configurator
val environment = System.getProperty("application.environment");
Configurator.initialize(null, "src/main/resources/log4j2-"+environment+".properties"));
而且,你必须有如下结构
src/main/resources/
log4j2-dev.properties
log4j2-e2e.properties
log4j2-uat.properties
log4j2-prod.properties
【讨论】:
PropertyConfigurator。答案已更新
APPLICATION_ENVIRONMENT=prod,这是在我的/etc/profile 中使用export APPLICATION_ENVIRONMENT=prod 完成的