2010-05-14 14 views
5

Ben FATAL ve DEBUG benim log4net logger en minLevel ve maxLevel sırasıyla set Say, ancak bazı senaryo altında ben WARN düzeyde yazılı log öğeleri kısmak ve diğer tüm tutmak istiyorum aktif aralıktaki seviyeler. log4net bir aralıkta çeşitli günlük seviyelerini iptal edilmesi

bir şekilde yerine minLevel ve maxLevel kullanarak bir aralık belirleyerek daha log-seviyelerinin 'ayrık' seviyelerini kullanmak mümkün mü?

Bunun basit olması gerektiğine inanıyorum, ancak herhangi bir log4net belgesi veya bu sorunla ilgili örnek bulunamadı.

cevap

7

Ekleyicinizdeki LevelMatchFilter'u kullanabilirsiniz.

Örnek:

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="DEBUG" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="INFO" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="ERROR" /> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
    ... 
</appender> 

Bu örnek, sadece baskı DEBUG olacaktır; BİLGİ ve HATA mesajları. Bunu ihtiyaçlarınıza göre özelleştirmek kolaydır.

Not: Sonunda DenyAllFilter'u unutmayın.

+0

Hey! Hızlı yanıt için teşekkürler. Programlı olarak yapılabilir mi? Sadece her bir ekleyicinin değil, Logger'ın (kök) günlük seviyesini değiştirmenin bir yolunu buldum. –

+0

Üzgünüm, yorumunu kaçırdım. Programatik olarak da mümkün olmalıdır. Burada tüm eklere nasıl ulaşılacağını görebilirsiniz: http://stackoverflow.com/questions/3016108/change-log4net-conversion-pattern-or-layout-at-runtime/3031867#3031867 –

0

Kullanım LevelRangeFilter

<filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMax value="FATAL" /> 
    <levelMin value="ERROR" /> 
</filter> 
+2

Hey, doğal kullanım olarak form, ben bu seçeneği denedim ama beni de istemiyorum * ile FATAL ve ERROR arasındaki seviyeleri ile mesajlar için beni zorlar (HATA ve FATAL bitişik olsa bile, prensip hala geçerlidir). Yine de teşekkürler! –

2

Tüm istenen çıktıyı elde etmek için kombine edilebilir nasıl log4net filtreler serin. Tüm günlük girişleri varsayılan olarak "Nötr" filtre düzenine sahiptir ve log4net varsayılan olarak nötr olan tüm girişleri günlüğe kaydeder.

Ne LevelRangeFilter yapacak giriş seviyesi aralığında ise, bu "Kabul Et" filtre eğilim ayarlayacaktır (veya acceptOnMatch parametre false olarak ayarlanırsa olduğu gibi onun eğilim bırakın) onu ve olduğu "Reddet" seçeneği ile aralıkta olmayan tüm girişleri işaretler.

LevelMatchFilter o zaman, eşsiz girişleri günkü kalacak "Reddet" girdileri eşleşen ayarlayacaktır, acceptToMatchfalse ayarlanmadığı sürece "Kabul Et" için levelToMatch parametresinde belirtilen filtre için eğilim ayarlayacaktır önce.

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMax value="FATAL" /> 
     <levelMin value="ERROR" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="WARN" /> 
     <acceptOnMatch value="false" /> 
    </filter> 
</appender> 

Bu kolayca üzerinde seviyesini uyarmak ve kapatma için geçiş sağlayacaktır:

Peki ne yapabiliriz istediğini elde etmek iki filtrelerin bir arada kullanmaktır. Aralığın dışındaki tüm girişler zaten "Reddet" olarak işaretlenir ve LevelMatchFilter burada WARN seviye girişlerini Reddet olarak işaretler, böylece DenyAllFilter gerekli değildir.