Log4jを設定して、異なるレベルのロギングを異なるアペンダーに出力する方法はありますか?
複数のログファイルを設定しようとしています。メインログファイルは、すべてのクラスのすべてのINFO以上のメッセージをキャッチします。 (開発では、すべてのDEBUG以上のメッセージ、および特定のクラスのTRACEをキャッチします。)
次に、別のログファイルを作成します。そのログファイルは、クラスの特定のサブセットのすべてのDEBUGメッセージをキャッチし、他のクラスのすべてのメッセージを無視します。
私が望んでいるものを取得する方法はありますか?
ありがとう、ダン
これで開始できます。
log4j.rootLogger=QuietAppender, LoudAppender, TRACE
# setup A1
log4j.appender.QuietAppender=org.Apache.log4j.RollingFileAppender
log4j.appender.QuietAppender.Threshold=INFO
log4j.appender.QuietAppender.File=quiet.log
...
# setup A2
log4j.appender.LoudAppender=org.Apache.log4j.RollingFileAppender
log4j.appender.LoudAppender.Threshold=DEBUG
log4j.appender.LoudAppender.File=loud.log
...
log4j.logger.com.yourpackage.yourclazz=TRACE
おそらくこんな感じ?
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.Apache.org/log4j/">
<!-- general application log -->
<appender name="MainLogFile" class="org.Apache.log4j.FileAppender">
<param name="File" value="server.log" />
<param name="Threshold" value="INFO" />
<layout class="org.Apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
</layout>
</appender>
<!-- additional fooSystem logging -->
<appender name="FooLogFile" class="org.Apache.log4j.FileAppender">
<param name="File" value="foo.log" />
<layout class="org.Apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
</layout>
</appender>
<!-- foo logging -->
<logger name="com.example.foo">
<level value="DEBUG"/>
<appender-ref ref="FooLogFile"/>
</logger>
<!-- default logging -->
<root>
<level value="INFO"/>
<appender-ref ref="MainLogFile"/>
</root>
</log4j:configuration>
したがって、すべての情報メッセージはserver.logに書き込まれます。対照的に、foo.logには、デバッグレベルのメッセージを含むcom.example.fooメッセージのみが含まれます。
この質問はありましたが、ひねりを加えて-さまざまなコンテンツをさまざまなファイルに記録しようとしていました。 LowLevelデバッグログとHighLevelユーザーログの情報がありました。 LowLevelが1つのファイルのみに行き、HighLevelがファイルとsyslogdの両方に行きたいと思っていました。
私の解決策は、3つのアペンダーを構成し、次のようにロギングをセットアップすることでした。
log4j.threshold=ALL
log4j.rootLogger=,LowLogger
log4j.logger.HighLevel=ALL,Syslog,HighLogger
log4j.additivity.HighLevel=false
私が理解するのが難しかったのは、「log4j.logger」に複数のアペンダーをリストできることです。私は一度に1行ずつ実行しようとしていました。
これが誰かの助けになることを願っています!
メインのログファイル/アペンダーの場合、.Threshold = INFO
ロガーでDEBUG、TRACEなどが有効になっているかどうかに関係なく、アペンダーに実際に記録される内容をINFO以上に制限します。
DEBUGをキャッチし、それ以上のことは何もありません...おそらく、カスタムアペンダーを作成する必要があります。
ただし、トラブルシューティングと分析が非常に困難になると思われるため、これを行わないことをお勧めします。
デモリンク: https://github.com/RazvanSebastian/spring_multiple_log_files_demo.git
私のソリューションは、spring-boot-starter-log4j
を使用したXML構成に基づいています。この例は、spring-boot-starter
と2つのLoggerが異なるログファイルに書き込む基本的な例です。