scala根据环境更改log4j.property输出文件夹

时间:2017-05-15 18:57:17

标签: scala sbt

我有一个带有log4j.properties文件的scala项目。我本地的输出文件夹与dev,QA,prod中的输出文件夹不同。有没有办法在进行SBT构建时更新此文件的位置。

很久以前我使用过ant,我们有一个build.properties文件,它将根据build.properties文件中的值替换属性文件中的值。

1 个答案:

答案 0 :(得分:1)

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配置。

// for log4j

val environment = System.getProperty("application.environment");    
org.apache.log4j.PropertyConfigurator.configure("src/main/resources/log4j-"+environment+".properties")

// for 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
相关问题