log4j2 以编程方式更改滚动文件附加器最大文件
log4j2 change Rolling file appender max files programmatically
我正在开发一个使用 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?
}
}
以编程方式继续修改滚动文件附加程序的方法是什么?
你走在正确的轨道上。创建新策略后执行:
Appender appender = config.getAppender("MyRollingFile");
if (appender instanceof RollingFileAppender) {
((RollingFileAppender) appender).getManager().setRolloverStrategy(newStrategy);
}
如果你想修改所有的 RollingFileAppender 然后做:
Map<String, Appender> appenders = config.getAppenders();
for (Appender appender : appenders.values()) {
if (appender instanceof RollingFileAppender) {
((RollingFileAppender) appender).getManager().setRolloverStrategy(newStrategy);
}
}
rgoers 的解决方案对我来说就像一个魅力。我只需要更改策略创建方法,因为
CreateStrategy 现已弃用。为了创建一个新策略,我使用了:
DefaultRolloverStrategy newStrategy = DefaultRolloverStrategy
.newBuilder()
.withMax(String.valueOf(maxLogFiles))
.withCompressionLevelStr(String.valueOf(Deflater.DEFAULT_COMPRESSION))
.withFileIndex("min")
.withConfig(config)
.build();
我正在开发一个使用 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?
}
}
以编程方式继续修改滚动文件附加程序的方法是什么?
你走在正确的轨道上。创建新策略后执行:
Appender appender = config.getAppender("MyRollingFile");
if (appender instanceof RollingFileAppender) {
((RollingFileAppender) appender).getManager().setRolloverStrategy(newStrategy);
}
如果你想修改所有的 RollingFileAppender 然后做:
Map<String, Appender> appenders = config.getAppenders();
for (Appender appender : appenders.values()) {
if (appender instanceof RollingFileAppender) {
((RollingFileAppender) appender).getManager().setRolloverStrategy(newStrategy);
}
}
rgoers 的解决方案对我来说就像一个魅力。我只需要更改策略创建方法,因为 CreateStrategy 现已弃用。为了创建一个新策略,我使用了:
DefaultRolloverStrategy newStrategy = DefaultRolloverStrategy
.newBuilder()
.withMax(String.valueOf(maxLogFiles))
.withCompressionLevelStr(String.valueOf(Deflater.DEFAULT_COMPRESSION))
.withFileIndex("min")
.withConfig(config)
.build();