【问题标题】:log4j2 change Rolling file appender max files programmaticallylog4j2 以编程方式更改滚动文件附加程序最大文件
【发布时间】: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?

    }

}

以编程方式修改滚动文件附加程序的方法是什么?

【问题讨论】:

标签: java log4j2 rollingfileappender


【解决方案1】:

你在正确的轨道上。创建新策略后,请执行以下操作:

Appender appender = config.getAppender("MyRollingFile");
if (appender instanceof RollingFileAppender) {
    ((RollingFileAppender) appender).getManager().setRolloverStrategy(newStrategy);
}

如果你想修改所有 RollingFileAppenders 然后做:

Map<String, Appender> appenders = config.getAppenders();
for (Appender appender : appenders.values()) {
    if (appender instanceof RollingFileAppender) {
        ((RollingFileAppender) appender).getManager().setRolloverStrategy(newStrategy);
    }
}

【讨论】:

    【解决方案2】:

    rgoers 的解决方案对我来说就像是一种魅力。我只需要更改策略创建方法,因为 CreateStrategy 现在已弃用。创建我使用的新策略:

               DefaultRolloverStrategy newStrategy = DefaultRolloverStrategy
        .newBuilder()
        .withMax(String.valueOf(maxLogFiles))
        .withCompressionLevelStr(String.valueOf(Deflater.DEFAULT_COMPRESSION))                                                                
        .withFileIndex("min")
        .withConfig(config)
        .build();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 2021-07-05
      • 2015-03-20
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      相关资源
      最近更新 更多