3

特定の結果を収集するために、プロジェクトで log4j FileAppender を使用しています。アプリケーションの再起動時に、以前の結果ファイルを保持し、新しい結果ファイルを開始したいと考えています。それは可能ですか?

例えば:

  • アプリケーションを起動し、結果を results.log に書き込みます
  • 申し込み終了
  • アプリケーションを再起動し、結果を results_1.log に書き込みます
  • ...

DailyRollingFileAppender をチェックアウトしましたが、特定の日付設定で自動的にロールオーバーされるため、実際には必要ありません。アプリケーションの再起動時にロールオーバーする必要があります。

4

4 に答える 4

1

私は自分のアペンダーを書くことでこれを解決しました:

import org.apache.log4j.RollingFileAppender;

/**
   This appender rolls over at program start.
   This is for creating a clean boundary between log data of different runs.
*/
public class RunRolledFileAppender
    extends RollingFileAppender
{
  public RunRolledFileAppender() { }

  @Override
  public void activateOptions() {
    super.activateOptions();
    super.rollOver();
  }

  @Override
  public void rollOver() { }

}

MaxFileSize 設定が機能せず、それ以外の場合は Appender も 10MB ごとにロールオーバーするため、rollOver() の醜い無効化が必要であったことに注意してください。これは必要ありませんでした。

于 2014-02-15T13:49:37.403 に答える
1

アプリケーションでログ ファイルを動的に設定するのはどうですか? これを行うには、アプリケーションの起動時にプログラムでファイル アペンダーを作成し、それを現在のロガーにアタッチします。

たとえば、次のコードは、現在の時刻に基づいて新しいログ ファイルを作成します。例results_1336482894.logresults_1336486780.log

    Date now = new Date();
    FileAppender myFileAppender = new FileAppender();
    myFileAppender.setName("myFileAppender");
    myFileAppender.setFile("results_" + now.getTime() + ".log");
    myFileAppender.setLayout(new PatternLayout("%d %-5p [%t]: %m%n"));
    myFileAppender.setThreshold(Level.DEBUG);
    myFileAppender.activateOptions();

    Logger myLogger = Logger.getLogger("name of your logger"); //Or use getRootLogger() instead
    myLogger.addAppender(myFileAppender);
于 2012-05-08T13:19:20.087 に答える
0

ExternallyRolledFileAppenderおよびクラスを使用してRoller、アプリケーションの起動時にログファイルをロールオーバーできます。

クラスの例を次に示します。

import org.apache.log4j.Logger;
import org.apache.log4j.varia.Roller;
public class Test {
    private static final Logger log = Logger.getLogger(Test.class);
    public static void main(final String[] args) {
        Roller.main(new String[] {"localhost", "9999"});
        log.debug("Started application!");
    }
}

そしてサンプルlog4j.propertiesファイル:

log4j.appender.file=org.apache.log4j.varia.ExternallyRolledFileAppender
log4j.appender.file.File=app.log
log4j.appender.file.Port=9999
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5p: %t: %c: %m%n
log4j.rootLogger=DEBUG, file

の警告に注意してくださいExternallyRolledFileAppender

イニシエーターは認証されていないことに注意してください。誰でもロールオーバーをトリガーできます。実稼働環境では、望ましくないロールオーバーを防ぐために、何らかの形式の保護を追加することをお勧めします。

これがニーズに合わない場合は、独自の同様のAppender実装を作成するのは簡単です。

于 2012-05-08T13:29:20.107 に答える