log4j: rejestruje dane wyjściowe określonej klasy do określonego programu dołączającego

161

Używam log4j i chciałbym skierować dane wyjściowe niektórych Loggerów do określonych plików.

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 można to zrobić?

gubrutz
źródło

Odpowiedzi:

203

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
Maurice Perry
źródło
21
ahh - takie proste! Dzięki! Czy ustawienie log4j.additivity.foo.bar.Baz = false wymusza, że ​​dane wyjściowe Baz nie pojawią się w aplikacji appender rootLoggera?
gubrutz
3
do jakiej wersji log4J to służy? Próbuję znaleźć konfigurację XML, aby zrobić to samo dla log4j w wersji 1.2.17
AC
1
@RodrigoGurgel tak, nie ma tam nic niezwykłego
Maurice Perry
4
@dwjohnston ustawienie addytywności na false uniemożliwi rejestratorowi rejestrowanie się do dołączających jego przodków (domyślnie jest to prawda). W tym przypadku, gdyby addytywność została pozostawiona na wartość true, logowanie do programu dołączającego Baz byłoby zapisywane do obu plików.
Maurice Perry,
1
jakieś przemyślenia na temat konfiguracji xml?
Igor Donin
21

Oto odpowiedź dotycząca konfiguracji XML, zwróć uwagę, że jeśli nie podasz appenderowi pliku a ConversionPattern, utworzy on plik 0-bajtowy i nic nie zapisze:

<?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>
mikeb
źródło
2
ważne jest, aby usunąć je <appender-ref ref="bdfile"/>z <root>- w przeciwnym razie cały dziennik zostanie skopiowany do tego pliku.
sobota
jak skonfigurować to dla domyślnego pakietu lub dla określonej klasy bez pakietu?
Prasad Jadhav
To jest <logger>...żywioł. Określ klasę lub pakiet jako nazwę, a program dołączający jako plik dołączający.
mikeb