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?
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).
Tags und Links log4net