2012-05-08 22 views
3

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

  • Startアプリケーション、
  • をresults_1.logする結果を書き込む、
  • アプリケーションが
  • 再起動アプリケーションを終了したresults.logする結果を書き込む...

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

答えて

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); 
+0

私は自分のコードを "きれい"にしておきたいので、以前はlog4jの設定をすべてXMLファイルに取り除いていました。しかし、私はsetFile()を唯一のプログラム的な設定として使ってみました。 – EsTeGe

0

あなたは、アプリケーションの起動時にログファイルをロールオーバーするExternallyRolledFileAppenderRollerクラスを使用することができます。

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実装を作成するのは簡単です。

私は私自身のアペンダ書き込むことによってこれを解決した
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設定が機能しなかったことから、必要だったとアペンダは、そうでない場合も、すべての10メガバイトをロールオーバーしていること私は必要なかった。

関連する問題