2010-11-10 11 views
8

ich eine log4j.properties-Datei, die etwa wie folgt aussieht:ausschließen eine Klasse von einem log4j Appender

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

Regel für Klassen, die die Paketstruktur von com.foo übereinstimmen ich die foo-log appender verwendet werden wollen. In diesem Paket möchte ich jedoch, dass die BarImpl Protokolle den bar-log Appender, aber nicht den foo-log Appender verwenden. Momentan werden alle von BarImpl geschriebenen Protokolle sowohl von foo-log als auch von bar-log (wie erwartet) verarbeitet. Wie bekomme ich den foo-log Appender, um die BarImpl-Klasse zu ignorieren?

Antwort

13

Von der Log4j Dokumentation:

Jede aktivierte Protokollierung Anforderung für einen bestimmten Logger sowie der Appen höher in der Hierarchie zu all Appen in diesem Logger weitergeleitet werden. Mit anderen Worten, Appender werden additiv von der Logger-Hierarchie vererbt. Wenn beispielsweise ein Konsolenappender zum Stammlogger hinzugefügt wird, werden alle aktivierten Protokollanforderungen zumindest auf der Konsole gedruckt. Wenn zusätzlich ein Datei-Appender zu einem Logger hinzugefügt wird, beispielsweise C, dann werden die aktivierten Protokollierungsanforderungen für C- und C-Kinder in einer Datei und auf der Konsole gedruckt. Es ist möglich, dieses Standardverhalten zu überschreiben, sodass die Appender-Akkumulation nicht länger additiv ist, indem Sie das Additivitäts-Flag auf false setzen.

Versuchen Sie es mit der folgenden Zeile zu experimentieren (oder ähnlich):

log4j.additivity.com.foo.BarImpl = false

Verwandte Themen