2010-05-04 5 views
140

J'utilise log4j et je souhaite acheminer la sortie de certains enregistreurs vers des fichiers spécifiques.log4j: Consigne la sortie d'une classe spécifique à un appender spécifique

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.

Est-ce que cela peut être fait?

Répondre

178

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

ahh - c'est simple! Merci! Est-ce que le paramètre log4j.additivity.foo.bar.Baz = false impose que la sortie de Baz n'apparaisse pas dans l'appender de rootLogger? – gubrutz

+0

oui, c'est vrai –

+2

quelle version de log4J est-ce? J'essaye de trouver la configuration de xml pour faire la même chose pour log4j la version 1.2.17 –

12

Voici une réponse concernant la configuration XML, notez que si vous ne donnez pas le fichier appender un ConversionPattern il va créer 0 fichier octet et ne pas écrire quoi que ce soit:

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

il est critique d'enlever '' de '' - sinon vous verrez votre journal entier copié dans ce fichier également. – sab

+0

comment configurer ceci pour pacakge par défaut ou pour la classe spécifique sans paquet? –

+0

C'est l'élément ' ...'. Spécifiez la classe ou le package en tant que nom et l'appender en tant qu'appendice de fichier. – mikeb

Questions connexes