2011-12-31 18 views
4

私がやりたいことはとても簡単ですが、log4jでうまく動作しないようです。log4jはクラスとレベルに応じて異なるファイルに出力されます

2つのログファイルが必要です。最初のクラスにはレベルデバッグ以上のデバッグ文がすべて含まれている必要がありますが、my.appのクラスからのみです。*

2番目のログファイルには、ソースクラスにかかわらずレベルwarn以上のすべてのメッセージが含まれている必要があります。

私は、次の設定を試してみましたが、それは動作しません:

log4j.rootLogger=warn,root 
log4j.appender.root=org.apache.log4j.FileAppender 
log4j.appender.root.layout = org.apache.log4j.PatternLayout 
log4j.appender.root.layout.conversionPattern = %d [%t] %-5p %c - %m%n 
log4j.appender.root.file = /tmp/logs/warn.file 
log4j.appender.root.append = true 
log4j.appender.root.MaxFileSize=10MB 
log4j.appender.root.MaxBackupIndex=7 

log4j.logger.my.app=debug,debugAppender 
log4j.appender.debugAppender = org.apache.log4j.RollingFileAppender 
log4j.appender.debugAppender.file = /tmp/logs/my.debug.file 
log4j.appender.debugAppender.layout = org.apache.log4j.PatternLayout 
log4j.appender.debugAppender.layout.conversionPattern = %d [%t] %-5p %c - %m%n 
log4j.appender.debugAppender.append = true 
log4j.appender.debugAppender.MaxFileSize=10MB 
log4j.appender.debugAppender.MaxBackupIndex=7 
log4j.additivity.my.app=false 

私は問題は最後の行であると思います。 additivityをtrueに設定すると、debugおよびinfoレベルのメッセージも私のwarn.fileに追加されます。しかし、falseに設定した場合、my.appからの警告はdebug.fileにのみ記録されます。

答えて

4

正確には、Log Level per appender for a single Loggerで説明されているように、各アペンダーでしきい値を使用したいと思うでしょう。

だから、trueに設定加法性を残し、その後、追加します。http://logging.apache.org/log4j/1.2/faq.html#a2.9

log4j.appender.root.Threshold=WARN 

詳細:「それはレベルによって異なるアペンダにログ出力を指示することは可能ですか?」

ちょうど私の追加$、0.02:私が代わりにプロパティ形式のXML形式への切り替えをお勧めしたい - log4jのはすぐに後継者のこの立派な組み合わせに置き換えられているとして、SLF4J/Logbackへの移行のためにきれいに準備あろう。

+0

ありがとうございます。log4j.appender.root.Threshold = WARNが完璧に機能しました。これはanywareに文書化されていますか?私が持っている唯一のドキュメンテーションはhttp://logging.apache.org/log4j/1.2/manual.htmlであり、そのページにはスレッショルドについても言及していません。 – MTilsted

+0

@MTilsted - はい、答えに含まれるFAQリンクに文書化されています。 – ziesemer

関連する問題