可以在同一个Tomcat Web应用程序中使用多个log4j.properties文件吗?

Way*_*neC 5 log4j

我正在为现成的Java Web应用程序编写自定义扩展.该应用程序使用log4j进行日志记录,我想专门为我的扩展添加一个新的记录器和appender.问题是应用程序管理log4j.properties文件,该文件是根据管理界面UI中的选择动态生成的.由于这是一个"现成的"应用程序,我无法修改源代码.因此,如果我将自己的记录器和附加程序添加到文件中,则在管理员更改UI中的日志记录首选项时,它会被覆盖.

有可能让log4j从2个文件中获取它的配置吗?例如,我想要以下内容:

applog.properties #(Dynamically generated from admin UI)
mylog.properties  #(My static properties)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,log4j会以某种方式组合两个文件中的条目以进行完整配置.

这可能吗?或者还有其他解决方法吗?

Way*_*neC 2

我从未找到一种方法来“合并”多个 log4j.properties 文件,但我确实找到了一个可行的解决方案。log4j 配置可以在运行时以编程方式进行操作,类似于下面的代码片段。这有效地将我的自定义 log4j 设置合并到 log4j.properties 文件定义的配置中,在我的情况下,我无法编辑该配置。

// Init custom logging

// Define layout
PatternLayout layout = new PatternLayout();
layout.setConversionPattern("%d [%-5p] -- %m%n");

// Create appender
RollingFileAppender appender = new RollingFileAppender();
appender.setFile(LOG_PATH);
appender.setMaxFileSize("2MB");
appender.setMaxBackupIndex(0);
appender.setLayout(layout);
appender.activateOptions(); // It didn't work without this

// Get our logger and add appender.
log = Logger.getLogger("[MyCustomLogger]");
log.setLevel(YOUR_LOGGING_LEVEL_HERE);
log.addAppender(appender);
Run Code Online (Sandbox Code Playgroud)