2010-05-04 8 views
140

Ich benutze log4j und möchte die Ausgabe bestimmter Logger zu bestimmten Dateien routen.log4j: Protokollausgabe einer bestimmten Klasse zu einem bestimmten Appender

Ich habe bereits mehrere Appender an Ort und Stelle. Um nun das Debuggen zu erleichtern, möchte ich log4j mitteilen, dass die von einer bestimmten Klasse (z. B. foo.bar.Baz) erzeugte Ausgabe in eine bestimmte Protokolldatei geschrieben werden sollte.

Kann dies getan werden?

Antwort

178

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 
+20

ahh - so einfach! Vielen Dank! Erzwingt die Einstellung log4j.additivity.foo.bar.Baz = false, dass die Ausgabe von Baz nicht im Appender des RootLoggers angezeigt wird? – gubrutz

+0

yep, das ist richtig –

+2

für welche Version von Log4J ist das? Ich versuche, die xml-Konfiguration zu finden, um das gleiche für log4j Version 1.2.17 zu tun –

12

Hier ist eine Antwort in Bezug auf die XML-Konfiguration beachten, dass, wenn Sie die Datei nicht geben appender einem ConversionPattern es 0 Byte-Datei erstellen wird und nicht alles schreiben:

<?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> 
+1

es ist wichtig, '' aus '' zu entfernen - sonst wirst du dein gesamtes Protokoll sehen kopiert auch in diese Datei. – sab

+0

Wie konfiguriert man dies für Standard Pacakge oder für bestimmte Klasse ohne Paket? –

+0

Es ist das ' ...' Element. Geben Sie die Klasse oder das Paket als Namen und den Appender als Dateiappender an. – mikeb

Verwandte Themen