2016-06-13 17 views
0

私はlog4j2(log4j2.xmlを使用してパラメータを初期化する)を使用するアプリケーションで作業しており、ロガーを読み込みます。アプリケーションが実行されると、ログレベルの変更やファイルアペンダーのプロパティのローリングなど、いくつかのパラメータをプログラムによってオーバーライドする必要があります。log4j2ローリングファイルアペンダの最大ファイルをプログラム的に

/** 
     * @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アペンダーのプロパティを使用して同じ問題に取り組もうとしました。しかし、私は既存のRollingFileアペンダのプロパティを変更する方法に

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? 

    } 

} 

を立ち往生していますアペンダプログラムでローリングファイルを変更することを続行する方法は何ですか?

+0

は多分の重複:[Log4j2 RollingFileアペンダ - 各ログファイルの開始時にカスタム情報を追加] (http://stackoverflow.com/questions/20819376/log4j2-rollingfile-appender-add-custom-info-at-the-start-of-each-logfile) –

+0

リンクされた質問は、基本的にlog4j2のフックを追加することを示唆しています。アペンダーを変更するだけで、機能全体をオーバーライドする必要はありません。アペンダーを削除して既存のアペンダーを再追加することはできませんか? – dmachop

答えて

1

あなたは正しい方向にあります。新しい戦略を作成した後実行します。

Appender appender = config.getAppender("MyRollingFile"); 
if (appender != null && 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); 
    } 
} 
関連する問題