2010-11-10 3 views
8

J'ai un fichier log4j.properties qui ressemble à ceci:Exclure une classe d'un appender log4j

log4j.logger.com.foo=INFO, foo-log 
log4j.logger.com.foo.BarImpl=INFO, bar-log 

Habituellement pour les classes qui correspondent à la structure de paquet de com.foo Je voudrais que le foo-log appender à utiliser. Toutefois, dans ce package, je souhaite que les journaux BarImpl utilisent l'appender bar-log mais pas l'appender foo-log. À l'heure actuelle, tous les journaux écrits par BarImpl sont gérés par foo-log et bar-log (comme prévu). Comment obtenir l'appender foo-log pour ignorer la classe BarImpl?

Répondre

13

De la documentation Log4j:

Chaque demande d'enregistrement est activée pour un enregistreur donné sera transmis à tous les appenders dans cet enregistreur ainsi que les appenders plus élevés dans la hiérarchie. En d'autres termes, les addenda sont hérités de manière additive de la hiérarchie du journal. Par exemple, si un appender de console est ajouté à l'enregistreur racine, toutes les demandes de journalisation activées s'imprimeront au moins sur la console. Si en plus un appender de fichier est ajouté à un enregistreur, disons C, alors les demandes de consignation activées pour les enfants de C et C s'imprimeront sur un fichier et sur la console. Il est possible de remplacer ce comportement par défaut afin que l'accumulation d'appender ne soit plus additive en définissant l'indicateur d'additivité sur false.

Essayez d'expérimenter avec la ligne suivante (ou similaire):

log4j.additivity.com.foo.BarImpl = false

Questions connexes