log4j: Belirli bir sınıfın belirli bir ekleyiciye günlük çıktısını kaydet


161

Log4j kullanıyorum ve belirli Kaydedicilerin çıktılarını belirli dosyalara yönlendirmek istiyorum.

Halihazırda birden fazla uygulayıcım var. Şimdi, hata ayıklamayı kolaylaştırmak için log4j'ye belirli bir sınıf (örneğin foo.bar.Baz) tarafından üretilen çıktının belirli bir günlük dosyasına yazılması gerektiğini söylemek istiyorum.

Bu yapılabilir mi?

Yanıtlar:


203

Bir örnek:

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 - bu kadar basit! Teşekkürler! Log4j.additivity.foo.bar.Baz = false ayarı, Baz çıktısının rootLogger ekinde görünmemesini zorunlu kılıyor mu?
gubrutz

3
bunun için log4J sürümü nedir? Log4j sürüm 1.2.17 için aynı şeyi yapmak için xml yapılandırması bulmaya çalışıyorum
AC

1
@RodrigoGurgel evet, orada alışılmadık bir şey yok
Maurice Perry

4
@dwjohnston, false değerine eklenti ayarı, kaydedicinin atalarının eklerine oturum açmasını önleyecektir (varsayılan olarak doğrudur), Bu durumda, eklenti true olarak bırakılmış olsaydı, Baz appender'a giriş her iki dosyaya da yazmış olurdu.
Maurice Perry

1
xml yapılandırma hakkında herhangi bir düşünce?
Igor Donin

21

XML yapılandırmasıyla ilgili bir cevap, dosya ekleyicisine bir vermezseniz ConversionPattern0 bayt dosyası oluşturacağını ve hiçbir şey yazmayacağını unutmayın:

<?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
o kaldırmak için kritik <appender-ref ref="bdfile"/>dan <root>aksi takdirde bütün günlük de bu dosyaya kopyalanan göreceksiniz -.
sab

nasıl varsayılan pacakge veya paketsiz belirli bir sınıf için yapılandırmak için?
Prasad Jadhav

Bu var <logger>...öğesi. Sınıfı veya paketi ad olarak ve eki dosya ekleyicisi olarak belirtin.
mikeb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.