2014-06-11 13 views
7

Kökün altında xml yapılandırmasında öncelikli öğeyi kullanan bazı kodları miras aldım.Log4Net'te XML yapılandırması Öncelik Seviye ile aynı şey midir?

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

Ancak http://logging.apache.org/log4net/release/manual/configuration.html de Log4net yapılandırma örnekleri her zaman aynı seviyede elemanı kullanılarak göstermek: Bu sadece gösterir http://iserialized.com/log4net-for-noobs/ örneğin gibidir yapılandırma, bu tip

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

olduğu
<priority> 

<level> 

?

Birisi bana bunun açıklandığı dokümanlardaki bir yere işaret edebilir mi?

cevap

17

Log4net'te Logger sınıfında Priority özelliği yoktur. Bulamadığım Priority'un tek örneği SmtpAppender idi. Yani ben kod içine gitti! Aşağıdaki kodu bulacaksınız XmlHierarchyConfigurator ait ParseChildrenOfLoggerElement yöntemde

:

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

Ah! Her iki değer de aynı özelliğe (ParseLevel yönteminin, gerçekten devralınmayan bir değer olan "devralınan" değerinin atanması, günlüğe kaydedilmesi ve yönetimi dışında çok fazla bir şey yapmaz) bu yüzden orada var; "level" ve "priority", yapılandırmanıza aynı etkiyi verir. Bu this article about log4j tarafından desteklenen aslında kütüphanenin bir önceki sürümü ile geriye dönük uyumluluk çeşit tutmak için yapıldığını tahmin: log4j ilk versiyonlarında

bu kategori ve öncelik, denilen ama şimdi edildi sırasıyla logger ve level olarak adlandırılırlar.

// ... 
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); 
     } 
    // ... 

Demek böyle: logger gibi düzeyi ve öncelik, birbirleriyle değiştirilebilir biz "kategorisinde" için arama eğer

Nitekim, aşağıdaki kodu içeren XmlHierarchyConfigurator bir Configure yöntemi yoktur ve kategori.

İlginç bir ayrıntı: Geçen mülkiyet kazanır ve logger olabilir özelliklerin sayısı ile ilgili sınırlama yoktur, bu nedenle bu geçerlidir ve seviye

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

Vay hata ayıklama için açardı. Teşekkürler. Ve, senin "ilginç tidbit" bir sonraki gizemi açıklıyor. Devralınan yapılandırma dosyalarından biri kök altında iki öncelikli öğeye sahipti. "Son mülk kazanır" ve test doğruladı, ama içgörü için teşekkürler. –

+0

Bir şey değil, ilginç bir analiz oldu ve bu yanıttan ayrıştırma yapılandırmasıyla ilgili bazı işaretçilerim vardı: http://stackoverflow.com/questions/23634472/using-ioc-in-a-custom-log4net -appender/23649446 # 23649446 – samy