这是我正在做的加载log4j2.xml文件的方式,从另一个属性文件中指定日志文件位置,以便支持目的保持配置简单:
MyProperties props = MyProperties.getInstance();
System.setProperty(MyConstants.AUDIT_LOG_ENV_VAR,
props.getAuditLogFileName());
ConfigurationSource source =
new ConfigurationSource(new FileInputStream(new File(
System.getProperty(MyConstants.PROPERTIES_FILE_ENV_VAR)
+ "/log4j2.xml")));
Configurator.initialize(null, source);
log4j2将会使用我的文件名,并且我已经在Appender中使用了环境变量替换指定了它:
<File name="AuditLogger" fileName="${sys:AUDIT_LOG}">
<PatternLayout pattern="DATETIME %d{yyyy-MM-dd HH:mm:ss:SSS zzz}%n%msg%n" />
</File>
然而,我不喜欢它,因为在下一行代码中读取文件名值之前,将其推送到系统环境中会有一种气味。
我喜欢使用ConfigurationFactory以编程方式配置log4j2,但似乎没有类似的方法来更多地构建log4j2.xml文件 - 或者还有其他方法吗?