log4j:特定のクラスの出力を特定のアペンダーに記録します


161

私はlog4jを使用しており、特定のロガーの出力を特定のファイルにルーティングしたいと考えています。

すでに複数のアペンダーを配置しています。ここで、デバッグを簡単にするために、特定のクラス(foo.bar.Bazなど)によって生成された出力を特定のログファイルに書き込む必要があることをlog4jに伝えます。

これはできますか?

回答:


203

例:

log4j.rootLogger=ERROR, logfile

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.datePattern='-'dd'.log'
log4j.appender.logfile.File=log/radius-prod.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n

log4j.logger.foo.bar.Baz=DEBUG, myappender
log4j.additivity.foo.bar.Baz=false

log4j.appender.myappender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.myappender.datePattern='-'dd'.log'
log4j.appender.myappender.File=log/access-ext-dmz-prod.log
log4j.appender.myappender.layout=org.apache.log4j.PatternLayout
log4j.appender.myappender.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n

21
ああ-とても簡単です!ありがとう!log4j.additivity.foo.bar.Baz = false設定は、Bazの出力がrootLoggerのアペンダーに表示されないことを強制しますか?
gubrutz

3
これはどのバージョンのlog4Jですか?私は、log4jのバージョン1.2.17のために同じことを行うには、XML構成を見つけようとしている
AC

1
@RodrigoGurgelはい、異常はありません
モーリスペリー

4
@dwjohnstonの加法性をfalseに設定すると、ロガーはその祖先のアペンダーにログを記録できなくなります(デフォルトではtrueです)。
モーリスペリー

1
xml構成についての考えは?
Igor Donin

21

XML構成に関する答えは次のとおりです。ファイルアペンダーを指定しない場合、ConversionPattern0バイトのファイルが作成され、何も書き込まれません。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <appender name="bdfile" class="org.apache.log4j.RollingFileAppender">
        <param name="append" value="false"/>
        <param name="maxFileSize" value="1GB"/>
        <param name="maxBackupIndex" value="2"/>
        <param name="file" value="/tmp/bd.log"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <logger name="com.example.mypackage" additivity="false">
        <level value="debug"/>
        <appender-ref ref="bdfile"/>
    </logger>

    <root>
        <priority value="info"/>
        <appender-ref ref="bdfile"/>
        <appender-ref ref="console"/>
    </root>

</log4j:configuration>

2
削除することが重要である <appender-ref ref="bdfile"/>から、<root>それ以外の場合は、あなたの全体のログは、同様にこのファイルにコピーが表示されます- 。
sab

これをデフォルトのパッケージまたはパッケージなしの特定のクラスに構成するにはどうすればよいですか?
Prasad Jadhav 2017年

それが<logger>...要素です。名前としてクラスまたはパッケージを指定し、ファイルアペンダーとしてアペンダーを指定します。
mikeb 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.