我有一个带有log4j.properties文件的scala项目。我本地的输出文件夹与dev,QA,prod中的输出文件夹不同。有没有办法在进行SBT构建时更新此文件的位置。
很久以前我使用过ant,我们有一个build.properties文件,它将根据build.properties文件中的值替换属性文件中的值。
答案 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