2014-06-11 5 views
7

Ich habe einen Code geerbt, der das Prioritätselement unter dem Stamm in seiner XML-Konfiguration verwendet. Das ist wie das Beispiel bei http://iserialized.com/log4net-for-noobs/, die zeigt:In Log4Net XML-Konfiguration ist Priorität die gleiche Sache wie Level?

<root> 
<priority value="ALL" /> 
<appender-ref ref="LogFileAppender" /> 
<appender-ref ref="ConsoleAppender"/> 
</root> 

die log4net Konfigurationsbeispiele bei http://logging.apache.org/log4net/release/manual/configuration.html immer jedoch zeigen sie den Level-Element mit:

<root> 
<level value="DEBUG" /> 
<appender-ref ref="A1" /> 
</root> 

Bei dieser Art von Konfiguration ist

<priority> 

das gleiche wie

<level> 

?

Kann mir jemand irgendwo in den Dokumenten zeigen, wo dies erklärt wird?

Antwort

17

Es gibt keine Priority Eigenschaft auf der Logger Klasse in log4net. Die einzige Instanz von Priority konnte ich finden in der SmtpAppender. Also in den Code bin ich gegangen!

Im ParseChildrenOfLoggerElement Methode des XmlHierarchyConfigurator Sie den folgenden Code finden:

if (xmlElement.LocalName == "level" || xmlElement.LocalName == "priority") 
{ 
    this.ParseLevel(xmlElement, log, isRoot); 
} 

Ah! Beide Werte werden auf dieselbe Eigenschaft aufgelöst (die ParseLevel Methode macht nicht wirklich viel, abgesehen von der Zuweisung, Protokollierung und Verwaltung des "ererbten" Wertes, der eine mögliche Ebene ist), also haben Sie es; "level" und "priority" haben den gleichen Effekt auf Ihre Konfiguration. Ich denke, dies getan wurde eine Art Rückwärtskompatibilität mit einer früheren Version der Bibliothek zu halten, was in der Tat von this article about log4j unterstützt:

In früheren Versionen von log4j wurden diese Kategorie und Priorität genannt, aber jetzt Sie heißen Logger und Level.

der Tat, wenn wir für „Kategorie“ zu suchen, gibt es eine Configure Methode in der XmlHierarchyConfigurator, die den folgenden Code enthält:

// ... 
XmlElement xmlElement = (XmlElement)xmlNode; 
if (xmlElement.LocalName == "logger") 
{ 
    this.ParseLogger(xmlElement); 
} 
else 
{ 
    if (xmlElement.LocalName == "category") 
    { 
     this.ParseLogger(xmlElement); 
    } 
    else 
    { 
     if (xmlElement.LocalName == "root") 
     { 
      this.ParseRoot(xmlElement); 
     } 
    // ... 

Das ist es also: Niveau und Priorität sind austauschbar, als Logger sind und Kategorie.

Interessante tidbit: Die letzte Eigenschaft gewinnt, und es gibt keine Begrenzung der Anzahl der Eigenschaften in Bezug auf Sie auf dem Logger haben könnte, so ist dies gültig und würde eingestellt das Niveau

<root> 
<priority value="ALL" /> 
<priority value="ERROR" /> 
<level value="DEBUG" /> 
</root> 
+1

Wow zu debuggen. Vielen Dank. Und Ihr "interessanter Leckerbissen" erklärt mein nächstes Geheimnis. Eine meiner geerbten Konfigurationsdateien hatte zwei Prioritätselemente unter root. Ich ging von "letzten Besitzgewinnen" aus, und die Tests bestätigten das, aber danke für die Einsicht. –

+0

Gern geschehen, es war ein interessantes Stück Analyse und ich hatte bereits einige Hinweise bezüglich der Konfiguration Parsing von dieser Antwort: http://stackoverflow.com/questions/23634472/using-ioc-in-a-custom-log4net -Anwender/23649446 # 23649446 – samy

Verwandte Themen