我正在为现成的Java Web应用程序编写自定义扩展。该应用程序使用log4j进行日志记录,我想专门为我的扩展添加一个新的记录器和appender。问题是应用程序管理log4j.properties文件,该文件是根据管理界面UI中的选择动态生成的。由于这是一个“现成的”应用程序,我无法修改源代码。所以,如果我添加自己的记录器和放大器appender(s)到文件,当管理员更改UI中的日志记录首选项时,它会被覆盖。
是否有可能让log4j从2个文件中获取配置?例如,我想要以下内容:
applog.properties #(Dynamically generated from admin UI)
mylog.properties #(My static properties)
在这种情况下,log4j会以某种方式合并两个文件中的条目以进行完整配置。
这可能吗?或者还有其他解决方法吗?
答案 0 :(得分: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);