log4j: Protokolliert die Ausgabe einer bestimmten Klasse an einen bestimmten Appender


161

Ich verwende log4j und möchte die Ausgabe bestimmter Logger an bestimmte Dateien weiterleiten.

Ich habe bereits mehrere Appender eingerichtet. Um das Debuggen zu vereinfachen, möchte ich log4j mitteilen, dass die von einer bestimmten Klasse (z. B. foo.bar.Baz) generierte Ausgabe in eine bestimmte Protokolldatei geschrieben werden soll.

Kann das gemacht werden?

Antworten:


203

Ein Beispiel:

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 - so einfach! Vielen Dank! Erzwingt die Einstellung log4j.additivity.foo.bar.Baz = false, dass die Ausgabe von Baz nicht im Appender des rootLogger angezeigt wird?
Gubrutz

3
Für welche Version von log4J ist das? Ich versuche, die XML-Konfiguration zu finden, um dasselbe für log4j Version 1.2.17
AC

1
@ RodrigoGurgel ja, nichts Ungewöhnliches dort
Maurice Perry

4
@dwjohnston Wenn Sie die Additivität auf false setzen, wird verhindert, dass sich der Logger bei den Appendern seiner Vorfahren anmeldet (standardmäßig true). Wäre die Additivität auf true belassen worden, hätte die Protokollierung beim Baz-Appender in beide Dateien geschrieben.
Maurice Perry

1
Irgendwelche Gedanken zur XML-Konfiguration?
Igor Donin

21

Hier ist eine Antwort bezüglich der XML-Konfiguration. Beachten Sie, dass, wenn Sie dem Datei-Appender keine geben, eine ConversionPattern0-Byte-Datei erstellt und nichts geschrieben wird:

<?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
Es ist wichtig, <appender-ref ref="bdfile"/>aus zu entfernen. <root>Andernfalls wird auch Ihr gesamtes Protokoll in diese Datei kopiert.
Sab

Wie konfiguriere ich dies für das Standardpaket oder für eine bestimmte Klasse ohne Paket?
Prasad Jadhav

Es ist das <logger>...Element. Geben Sie die Klasse oder das Paket als Namen und den Appender als Datei-Appender an.
Mikeb
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.