log4j: registra l'output di una classe specifica su un appender specifico


161

Uso log4j e vorrei indirizzare l'output di alcuni logger a file specifici.

Ho già più appendici in atto. Ora, per facilitare il debug, voglio dire a log4j che l'output generato da una classe specifica (ad esempio foo.bar.Baz) dovrebbe essere scritto in un file di registro specifico.

Può essere fatto?

Risposte:


203

Un esempio:

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 - così semplice! Grazie! Log4j.additivity.foo.bar.Baz = false setting impone che l'output di Baz non venga visualizzato nell'appender di rootLogger?
gubrutz,

3
per quale versione di log4J è? Sto cercando di trovare la configurazione XML per fare la stessa cosa per log4j versione 1.2.17
AC

1
@RodrigoGurgel sì, niente di insolito lì
Maurice Perry,

4
@dwjohnston impostando l'additività su false impedirà al logger di accedere alle appendici dei suoi antenati (è vero per impostazione predefinita), in questo caso, se l'additività fosse stata lasciata su vero, la registrazione sull'appender di Baz avrebbe scritto su entrambi i file.
Maurice Perry,

1
qualche pensiero sulla configurazione XML?
Igor Donin,

21

Ecco una risposta per quanto riguarda la configurazione XML, nota che se non dai un file appender creerà un file a ConversionPattern0 byte e non scriverà nulla:

<?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
è fondamentale rimuoverlo <appender-ref ref="bdfile"/>da <root>, altrimenti vedrai anche il tuo intero registro copiato in questo file.
sab

come configurarlo per pacakge predefinito o per classe specifica senza pacchetto?
Prasad Jadhav,

È l' <logger>...elemento. Specificare la classe o il pacchetto come nome e l'appender come appender di file.
Mike
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.