【发布时间】:2015-02-14 22:20:03
【问题描述】:
这是我加载 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 中使用 envvar 替换指定了它:
<File name="AuditLogger" fileName="${sys:AUDIT_LOG}">
<PatternLayout pattern="DATETIME %d{yyyy-MM-dd HH:mm:ss:SSS zzz}%n%msg%n" />
</File>
但是我不喜欢它,因为在下一行代码再次读回之前将文件名值推送到系统环境有一种味道。
我喜欢Configure log4j2 programmatically using ConfigurationFactory,但似乎没有类似的方法可以在 log4j2.xml 文件之上构建更多内容 - 或者有吗?
【问题讨论】:
-
你不使用 Java 7+ 吗?
-
我没有听从你的意图。如果您不想以编程方式设置属性,是否将其设置为 jvm 参数?
-
@AndyDufresne 你到底在问什么?我将很难更明确地表达我的问题。最后两段是关键。
标签: java logging configuration log4j2