2010-05-04 10 views
140

Używam log4j i chciałbym skierować wyjście niektórych Loggerów do określonych plików.log4j: Wyjście dziennika określonej klasy do konkretnego appendera

Mam już wielu aplikatorów. Teraz, aby ułatwić debugowanie, chcę powiedzieć log4j, że dane wyjściowe wygenerowane przez określoną klasę (np. Foo.bar.Baz) powinny zostać zapisane w określonym pliku dziennika.

Czy to można zrobić?

Odpowiedz

178

Przykład:

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 - to proste! Dzięki! Czy ustawienie log4j.additivity.foo.bar.Baz = false wymusza, że ​​wyjście bazy nie pojawi się w aplikacji dołączającej rootLoggera? – gubrutz

+0

tak, to prawda –

+2

do jakiej wersji log4J to jest? Próbuję znaleźć konfigurację xml, aby zrobić to samo dla log4j wersja 1.2.17 –

12

Oto odpowiedź odnośnie konfiguracji XML, trzeba pamiętać, że jeśli nie dają plik appender w ConversionPattern stworzy 0 bajtów pliku i nie pisać nic:

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

jest bardzo ważne, aby usunąć '' z '' - w przeciwnym razie zobaczysz cały swój dziennik również skopiowane do tego pliku. – sab

+0

jak skonfigurować to ustawienie domyślne dla pacakge lub dla określonej klasy bez pakietu? –

+0

To element ' ...'. Określa klasę lub pakiet jako nazwę i program dostarczający jako program dodający plik. – mikeb