Verschiedene Appender pro Namespace

8

Ich versuche, eine gemeinsame Protokollierungsbibliothek einzurichten, die die ILog -Instanz basierend auf dem aktuellen Stapel bestimmt und die beste zu verwendende Instanz von ILog ist.

Ich habe meine Konfiguration so eingerichtet:

%Vor%

Und ich habe eine Klasse wie folgt:

%Vor%

Wenn ich versuche, eine Instanz von ILog zu bekommen, übergebe ich den Typ ( var log = LogManager.GetLogger(typeof(MyClass)).Namespace); ) und ich möchte, dass kein Logger konfiguriert ist, also geht es im Namespace eine Ebene nach oben Baum (bis MyAssembly.MyNamespace ) und dann sehen, ob es an diesem Punkt konfiguriert ist.

Das Problem ist, dass das für ILog zurückgegebene MyAssembly.MyNamespace.SubNamespace für WARN-Ereignisse (und darüber) konfiguriert ist, im Wesentlichen was ich für das übergeordnete Element konfiguriert habe. Log4net scheint das ILog zurückzugeben, wenn der erforderliche Name einen definierten Namen enthält und nicht gleich ist.

Wie bekomme ich Log4net, um nur einen gültigen Logger zurückzugeben, wenn der Name der selbe wie in der Konfiguration ist?

    
Aaron Powell 23.07.2009, 00:01
quelle

1 Antwort

10

log4net behandelt Logger als in einer Hierarchie basierend auf ihren Namen, so dass der Logger mit dem Namen MyAssembly.MyNamespace.SubNamespace ein Kind des Loggers mit dem Namen MyAssembly.MyNamespace ist.

Wenn für einen Logger keine Ebene (WARN usw.) angegeben ist, durchläuft das System die Logger-Hierarchie, bis ein Logger mit einer konfigurierten Ebene gefunden wird - und dies wird zur effektiven Ebene für diesen Logger.

In Ihrem Fall hat der Child-Logger keine Ebene angegeben, daher übernimmt er die Ebene seiner Eltern - WARN. Wenn Sie

angeben %Vor%

Dann erhalten Sie DEBUG-Ausgabe von der Kind-Logger (an die Appender für die Eltern konfiguriert gesendet).

    
Vinay Sajip 23.07.2009, 01:10
quelle

Tags und Links