log4j: Keluaran log dari kelas tertentu ke appender tertentu

161

Saya menggunakan log4j dan ingin mengarahkan output dari Logger tertentu ke file tertentu.

Saya sudah memiliki beberapa appenders. Sekarang, untuk mempermudah proses debug, saya ingin memberi tahu log4j bahwa output yang dihasilkan oleh kelas tertentu (misalnya foo.bar.Baz) harus ditulis ke file log tertentu.

Bisakah ini dilakukan?

gubrutz
sumber

Jawaban:

203

Sebuah contoh:

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
Maurice Perry
sumber
21
ahh - sesederhana itu! Terima kasih! Apakah log4j.additivity.foo.bar.Baz = pengaturan salah memaksakan bahwa output Baz tidak akan muncul di append rootLogger?
gubrutz
3
untuk versi log4J apa ini? Saya mencoba mencari konfigurasi xml untuk melakukan hal yang sama untuk versi log4j 1.2.17
AC
1
@RodrigoGurgel ya, tidak ada yang aneh di sana
Maurice Perry
4
@dwjohnston mengatur aditivitas ke false akan mencegah logger dari login ke appenders dari leluhurnya (itu benar secara default), Dalam hal ini, jika additivity dibiarkan benar, login ke append Baz akan menulis ke kedua file.
Maurice Perry
1
ada pemikiran tentang konfigurasi xml?
Igor Donin
21

Berikut ini jawaban mengenai konfigurasi XML, perhatikan bahwa jika Anda tidak memberikan file appender, ConversionPatternitu akan membuat file 0 byte dan tidak menulis apa pun:

<?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>
mikeb
sumber
2
sangat penting untuk menghapus <appender-ref ref="bdfile"/>dari <root>- jika tidak, Anda akan melihat seluruh log Anda disalin ke file ini juga.
sab
bagaimana mengkonfigurasi ini untuk pacakge default atau untuk kelas tertentu tanpa paket?
Prasad Jadhav
Itu <logger>...elemennya. Tentukan kelas atau paket sebagai nama dan appender sebagai file appender.
mikeb