log4j: journaliser la sortie d'une classe spécifique vers un appender spécifique


161

J'utilise log4j et je souhaite acheminer la sortie de certains enregistreurs vers des fichiers spécifiques.

J'ai déjà plusieurs appenders en place. Maintenant, pour faciliter le débogage, je veux dire à log4j que la sortie générée par une classe spécifique (par exemple foo.bar.Baz) doit être écrite dans un fichier journal spécifique.

Cela peut-il être fait?

Réponses:


203

Un exemple:

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 - aussi simple que cela! Merci! Le paramètre log4j.additivity.foo.bar.Baz = false impose-t-il que la sortie de Baz n'apparaisse pas dans l'appender du rootLogger?
gubrutz

3
à quelle version de log4J s'agit-il? J'essaie de trouver la configuration xml pour faire la même chose pour log4j version 1.2.17
AC

1
@RodrigoGurgel oui, rien d'inhabituel là
Maurice Perry

4
@dwjohnston définissant l'additivité sur false empêchera l'enregistreur de se connecter aux appenders de ses ancêtres (c'est vrai par défaut), Dans ce cas, si l'additivité avait été laissée à true, la journalisation dans l'appender Baz aurait écrit dans les deux fichiers.
Maurice Perry

1
des pensées sur la configuration xml?
Igor Donin

21

Voici une réponse concernant la configuration XML, notez que si vous ne donnez pas au fichier appender, ConversionPatternil créera un fichier de 0 octet et n'écrira rien:

<?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
il est essentiel de supprimer <appender-ref ref="bdfile"/>de <root>- sinon vous verrez tout votre journal copié dans ce fichier également.
sab

comment configurer cela pour pacakge par défaut ou pour une classe spécifique sans package?
Prasad Jadhav

C'est l' <logger>...élément. Spécifiez la classe ou le package comme nom et l'appender comme appender de fichier.
mikeb
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.