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?

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

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>

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.