2013-10-02 4 views
7

どのようにlog4j.propertiesを設定して、アプリケーションの実行ごとに1つのログファイルにするのですか? 私はファイル名にタイムスタンプを使うべきだと読んだことがありますが、時間が経つにつれて実行ごとに多くのファイルが作成されます。log4jで1回のログファイルを1つずつ

DailyRollingFileAppenderとRollingFileAppenderを試しましたが、実行ごとに1つのログを構成する方法が見つかりませんでした。ログは複数のログに分割されるべきではなく、切り捨てるべきではなく、古い実行のファイルを保存する必要があります。

各クラスは、それ自身のクラス名の静的org.slf4j.Loggerを持っています

private static final Logger log = LoggerFactory.getLogger(Foo.class); 

これは私の現在のlog4j.properties

log4j.rootLogger=error, RootAppender, RootErrorAppender 

#log4j.logger.com.example=info, qspaBackendAppender, stderr 
log4j.logger.com.example=info, qspaBackendAppender 
log4j.additivity.com.example=true 

#log4j.logger.com.example.util=trace, qspaBackendAppender, stderr 
#log4j.additivity.com.example.util=true 

log4j.appender.qspaBackendAppender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.qspaBackendAppender.file=logs/qspaBackend.log 
log4j.appender.qspaBackendAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.qspaBackendAppender.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n 

log4j.appender.stderr=org.apache.log4j.ConsoleAppender 
log4j.appender.stderr.Target=System.err 
log4j.appender.stderr.layout=org.apache.log4j.PatternLayout 
log4j.appender.stderr.layout.ConversionPattern=%-5p %c{1}:%L - %m%n 

log4j.appender.RootAppender=org.apache.log4j.RollingFileAppender 
log4j.appender.RootAppender.file=logs/root.log 
log4j.appender.RootAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.RootAppender.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n 

log4j.appender.RootErrorAppender=org.apache.log4j.RollingFileAppender 
log4j.appender.RootErrorAppender.file=logs/rootError.log 
log4j.appender.RootErrorAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.RootErrorAppender.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n 
log4j.appender.RootErrorAppender.threshold=error 

答えて

2

Udo Klimaschewskiの答えとから答えを組み合わせるです所望の結果を得るためにはquestionである。

  1. プロパティはappend = falseを
  2. がcurrent.timeシステムプロパティを追加して、ファイル名に
+0

パーフェクト!正確に私が探していたもので、このようなカスタムFileAppenderよりはるかに簡単です:http://veerasundar.com/blog/2009/08/how-to-create-a-new-log-file-for-each-time- the-application-runs /でも同時実行では安全ではないかもしれませんが、これは私の問題ではありません – lilalinux

+2

「Udo Klimaschewskiの答え」 - >あなたはユーザープロファイルにリンクしています。私たちはあなたが何を指しているのか分かりません。 –

10

をそれを使用するを追加し、私はここに置くようウドKlimaschewskiの答えUDYは言及していた問題を検索していました私の解決策。 log4j.properties:

# Root logger option 
log4j.rootLogger=INFO, fileout 

# Direct log messages to file 
log4j.appender.fileout=org.apache.log4j.FileAppender 
log4j.appender.fileout.File=/logs/myapp_${current.date}.log 
log4j.appender.fileout.ImmediateFlush=true 
log4j.appender.fileout.Threshold=debug 
log4j.appender.fileout.Append=false 
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout 
log4j.appender.fileout.layout.conversionPattern=%5p | %d | %m%n 

は次にメインクラスでは、このブロックを置く:

public class Starter { 
    static{ 
     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hhmmss"); 
     System.setProperty("current.date", dateFormat.format(new Date())); 
    } 
関連する問題