【发布时间】:2016-10-14 08:22:16
【问题描述】:
我正在开发一个使用 log4j2(使用 log4j2.xml 初始化参数)并加载记录器的应用程序。当应用程序运行时,我需要以编程方式覆盖一些参数,例如更改日志级别和滚动文件附加程序属性。我可以使用
更改日志级别/**
* @param logger Logger instance
* @param level New log level to be applied on the logger instance
*/
private void setLoggerLevel(Logger logger, Level level) {
LoggerContext context = (LoggerContext) LogManager.getContext(false);
Configuration config = context.getConfiguration();
LoggerConfig loggerConfig = getLoggerConfig(logger.getName());
Logger rootLogger = LogManager.getRootLogger();
if(logger != rootLogger && loggerConfig != config.getLoggerConfig(rootLogger.getName()))
{
loggerConfig.setLevel(level);
context.updateLoggers();
}
}
现在我尝试使用 RollingFile appender 的属性来解决同样的问题。但是,我被困在如何修改现有 RollingFile appender 的属性上
Logger applicationLogger = LogManager.getLogger(logName);
if (applicationAppender instanceof RollingFileAppender) {
// Configure max properties of rolling file appender here
if (maxLogFiles != null) {
LoggerContext context = (LoggerContext) LogManager.getContext(false);
Configuration config = context.getConfiguration();
// Copied code from lib
DefaultRolloverStrategy newStrategy = DefaultRolloverStrategy.createStrategy(String.valueOf(maxLogFiles), null, null,
String.valueOf(Deflater.DEFAULT_COMPRESSION), null, true, config);
// How to modify the existing appender?
}
}
以编程方式修改滚动文件附加程序的方法是什么?
【问题讨论】:
-
链接的问题基本上建议为 log4j2 添加一个钩子。它不必为了修改附加程序而重写整个功能。我不能删除附加程序并重新添加现有的附加程序吗?
标签: java log4j2 rollingfileappender