Ich habe eine log4j.properties-Datei, die ungefähr so aussieht:
%Vor% Normalerweise sollte für Klassen, die der Paketstruktur von com.foo
entsprechen, der foo-log
appender verwendet werden. In diesem Paket möchte ich jedoch, dass die BarImpl
-Protokolle den bar-log
appender, nicht aber 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?
Aus der Log4j-Dokumentation:
Jede aktivierte Logging-Anfrage für einen bestimmten Logger wird an alle Appender in diesem Logger sowie an die höheren Appender in der Hierarchie weitergeleitet. 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.
Experimentieren Sie mit der folgenden Zeile (oder ähnlich):
log4j.additivity.com.foo.BarImpl = false