2010-01-12 5 views
3

Voici ce que j'essaie de faire: Je veux 2 fichiers journaux: Le premier enregistre le niveau INFO et le niveau supérieur pour toutes les parties des applications, mais enregistre aussi DEBUG et certains paquets. La seconde ne connecte ERROR et plus à travers tous les paquets. Je suis sûr que c'est probablement trivial mais je n'arrive pas à le comprendre. Voici le fichier de configuration que j'utilise actuellement:Configurer plusieurs fichiers journaux dans log4j en utilisant les catégories

log4j.rootLogger=INFO,console,R 

#console appender 
log4j.appender.console = org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout = org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern = %t %-5p %c{2} - %m%n 

#file appender 
log4j.appender.R = org.apache.log4j.DailyRollingFileAppender 
log4j.appender.R.DatePattern = '.'yyyy-MM-dd 
log4j.appender.R.File = log/log.txt 
log4j.appender.R.layout = org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern = [%d{ISO8601}]%5p%6.6r[%t]%x(%F:%L) - %m%n 

#Specific log levels 
log4j.category.com.mypackage1=DEBUG 
log4j.category.com.mypackage2=DEBUG 

Ceci n'a pas la partie log d'erreur, évidemment. Mon idée de base était d'ajouter un autre appender et de mettre son niveau de log à ERROR mais les catégories semblent le surcharger et aussi leurs informations, ce qui n'est pas ce que je veux. La raison pour laquelle ils sont là est parce que les autres paquets jettent beaucoup d'informations dont nous n'avons pas besoin quand nous mettons au debug et c'est ainsi que nous le contournerons. Je pense qu'il pourrait y avoir une meilleure approche globale mais ceci est mon premier fichier de configuration log4j. MISE À JOUR: Un collègue a suggéré d'utiliser 2 enregistreurs comme mentionné dans le message auquel kdgregory est lié dans son commentaire (Different log4j layout for debug and error?). Les gens là-bas semblaient penser que c'était une mauvaise idée, mais personne n'a jamais expliqué pourquoi. Cela semble un peu hacky mais ça fait ce dont nous avons besoin. Quelles sont les principales raisons de ne pas utiliser cette méthode (autre que d'avoir à gérer 2 enregistreurs différents)?

+0

Cette question peut vous aider (pas sûr qu'elle soit qualifiée de "doublon exact"): http://stackoverflow.com/questions/1008122/different-log4j-layout-for-debug-and-error – kdgregory

Répondre

8

Voici ce que je suis finalement venu avec qui a fait l'affaire:

log4j.rootLogger=INFO,console,stdLog,errorLog 

#console appender 
log4j.appender.console = org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout = org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern = %t %-5p %c{2} - %m%n 

#file appender 
log4j.appender.stdLog=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.stdLog.DatePattern = '.'yyyy-MM-dd 
log4j.appender.stdLog.File = log/log.txt 
log4j.appender.stdLog.layout = org.apache.log4j.PatternLayout 
log4j.appender.stdLog.layout.ConversionPattern = [%d{ISO8601}]%5p%6.6r[%t]%x(%F:%L) - %m%n 

#file appender 
log4j.appender.errorLog = org.apache.log4j.DailyRollingFileAppender 
log4j.appender.errorLog.DatePattern = '.'yyyy-MM-dd 
log4j.appender.errorLog.File = log/errorlog.txt 
log4j.appender.errorLog.layout = org.apache.log4j.PatternLayout 
log4j.appender.errorLog.layout.ConversionPattern = [%d{ISO8601}]%5p%6.6r[%t]%x(%F:%L) - %m%n 
log4j.appender.errorLog.Threshold=ERROR 

#Specific log levels 
log4j.category.com.mypackage1=DEBUG 
log4j.category.com.mypackage2=DEBUG 

Cela fait 2 journaux, l'un qui se connecte tout à avertir ou au-dessus plus au DEBUG ou au-dessus sur les paquets spécifiés pour le journal standard et à ERROR et au-dessus uniquement sur tous les packages dans le journal des erreurs.

Questions connexes