在 Log4j2 中组合来自多个属性文件的记录器和附加器?

问题描述 投票:0回答:1

我在 Tomcat 上部署了一个简单的 Web 应用程序 (sample.war),它默认使用 log4j2.properties 文件进行日志记录配置。现在,我需要从不同的属性文件 (mylog.properties) 创建记录器配置,而不会丢失原始 log4j2.properties 中定义的现有记录器和附加程序。

我尝试使用以下代码配置记录器:

public void configure(Properties props) {
    File mylogpropsFile = new File("mylog.properties");
    props.store(new FileOutputStream(mylogpropsFile), "");
    ConfigurationSource fromUri = ConfigurationSource.fromUri(mylogpropsFile.toURI());
    loggerContext = Configurator.initialize(null, fromUri);
    loggerContext.setConfigLocation(mylogpropsFile.toURI());
}

虽然此方法使用 mylog.properties 中的属性成功初始化 loggerContext,但它会覆盖现有的记录器和附加程序,因为 setConfigLocation 方法执行重新配置。

我需要一种方法来确保 log4j2.properties 和 mylog.properties 中的记录器和附加程序共存于同一个 loggerContext 对象中。 Log4j2 有办法实现这一点吗?

任何指导或建议将不胜感激!

“如果您能避免问我为什么使用不同的属性文件而不是单个属性文件,我将不胜感激。

java logging log4j2 appender
1个回答
0
投票

log4j2.configurationFile
Log4j 配置属性 接受以逗号分隔的 URI 列表,因此您只需将其设置为
classpath:log4j2.properties,classpath:mylog.properties

如果您确实需要从代码传递值,则可以使用

Configurator.initialize
重载,该重载采用
List<URI>
作为参数。

多个配置文件将创建一个

CompositeConfiguration
。有关默认合并机制的详细信息,请参见
CompositeConfiguration

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.