log4net hiyerarşisi ve günlük kaydı seviyeleri


127

Bu site diyor

Kaydediciler seviyelere atanabilir. Seviyeler, log4net.Core.Level sınıfının örnekleridir. Artan öncelik sırasına göre aşağıdaki seviyeler tanımlanmıştır :

  • HERŞEY
  • DEBUG
  • BİLGİ
  • WARN
  • HATA
  • ÖLÜMCÜL
  • KAPALI

DEBUG en düşük önceliğe sahip görünüyor ve ERROR daha yüksek.

Soru

  • Min ve Max örneğini DEBUG ve ERROR ayarlarsam, her şeyi DEBUG, INFO, WARN ve ERROR yazdırır. Min ve max filtre kullanılmadan. HATA belirtirsem (Günlük seviyesi = HATA) HATA AYIKLAMA, BİLGİ & UYARI içerecek mi?
 <filter type="log4net.Filter.LevelRangeFilter">
     <param name="LevelMin" value="ERROR"/>
     <param name="LevelMax" value="ERROR"/>
 </filter>

Minimum ve maksimum filtre yerine. Günlük kaydı için bir seviye yapılandırmak ve altındaki diğer tüm seviyeleri dahil etmek mümkün mü?

Örnek - Seviyeyi Hata olarak ayarlayın, DEBUG, INFO, WARN ve ERROR içerecektir. Bu log4net ile mümkün mü?

Yorumlardan birine göre log4net yapılandırması yayınlama:

     <?xml version="1.0" encoding="utf-8" ?>
     <configuration>
        <configSections>
            <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
        </configSections >
        <log4net debug="true">
  <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
        <layout type="log4net.Layout.XMLLayout" /> -->
        <param name="File" value="TestLog.log" />
        <param name="AppendToFile" value="false" />
        <layout type="log4net.Layout.PatternLayout">
            <header type="log4net.Util.PatternString" value="[START LOG] %newline" />
            <footer type="log4net.Util.PatternString" value="[END LOG] %newline" />
            <conversionPattern value="%d [%t] %-5p - %m%n" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG"/>
            <param name="LevelMax" value="ERROR"/>
        </filter>
    </appender>
<root>
        <level value="ALL" />
        <appender-ref ref="LogFileAppender" />
    </root>
    <logger name="log4NetExample">
        <!-- <appender-ref ref="B" /> -->
        <level value="ALL" />
        <appender-ref ref="LogFileAppender" />
    </logger>
</log4net>


günlük düzeyini INFO olarak ayarlamayı denediniz ve INFO ve DEBUG içerip içermediğini kontrol ettiniz mi?
Varsayılan

5
DEBUG en düşük önceliğe sahip gibi görünüyor ve Hata en yüksek. Bu bir öncelik değildir , ancak bir mesajın üstündeki veya üstündeki bir eşik günlüğe kaydedilir.
R. Schreurs

Sadece kullanmayı denediniz levelMaxmi? Sana belirtmek yoksa bunun altında herşeyi içermelidir düşünüyorumlevelMin
AN

Yanıtlar:


90

Bu, hangi düzey Kaydedicilere atanabilecek düzeylerde neyin kaydedildiğini anlamaya yardımcı olabilir. Seviyeler, log4net.Core.Level sınıfının örnekleridir. Artan önem sırasına göre aşağıdaki seviyeler tanımlanmıştır - Günlük Seviyesi.

Her bir ayar seviyesi için kaydedilen seviye sayısı:

 ALL    DEBUG   INFO    WARN    ERROR   FATAL   OFF
All                        
DEBUG  DEBUG                  
INFO   INFO   INFO               
WARN   WARN   WARN   WARN           
ERROR  ERROR  ERROR  ERROR  ERROR      
FATAL  FATAL  FATAL  FATAL  FATAL  FATAL  
OFF    OFF    OFF    OFF    OFF    OFF    OFF

2
Üzgünüm, bunun wswg olduğunu düşündüm, neden değil ??
Mel Pama

1
Cevapların uygun şekilde biçimlendirilmesi için sitenin bu bölümüne göz atabilirsiniz
Jarod Moser

36

Çoğu uygulama için bir minimum seviye belirlemek istersiniz, ancak maksimum seviye değil.

Örneğin, kodunuzda hata ayıklarken minimum seviyeyi DEBUG olarak ayarlayın ve üretimde bunu WARN olarak ayarlayın.


Lütfen güncellenmiş sorumu kontrol edin, Sorum seviyeler ve günlük ifadeleri için
Siva

Değişim <level value="ALL" /> içine <level value="WARN" />ve sadece uyarı ve hataları alırsınız.
Ilya Kogan

2
Hayır, yardımcı olmuyor. Değiştirmeye çalıştım. Aşağıdaki öncelik dahil günlükleri görmedim
Siva

12
Elbette önceliğin altındaki günlükleri görmeyeceksiniz. Bu bir var asgari öncelik Sen ayarı.
Ilya Kogan

19

DEBUG tüm mesajları, DEBUG mesajlarının yanı sıra INFO'yu vb. Gösterir.
Genellikle INFO veya WARN kullanılır. Bu, şirket politikasına bağlıdır.


Lütfen güncellenmiş sorumu kontrol edin, Sorum seviyeler ve günlük ifadeleri için
Siva

Lütfen log4Net yapılandırmanızın tamamını gönderin, araya giren iki kaydediciniz olabilir.
weismat

Ve şimdiye kadar kişisel olarak sadece seviye ayarını kullandım. Min / Max ayarlarından mümkünse kaçınılması gerektiğini düşünüyorum.
weismat

Tüm log4net yapılandırmasını gönderdim. Lütfen kontrol edin. Öğrenmeye ve uygulamaya çalışıyorum.
Siva

16

İşte tüm log4net seviyelerinin önceliğini anlatan bazı kodlar:

TraceLevel(Level.All); //-2147483648

TraceLevel(Level.Verbose);   //  10 000
TraceLevel(Level.Finest);    //  10 000
    
TraceLevel(Level.Trace);     //  20 000
TraceLevel(Level.Finer);     //  20 000
    
TraceLevel(Level.Debug);     //  30 000
TraceLevel(Level.Fine);      //  30 000
    
TraceLevel(Level.Info);      //  40 000
TraceLevel(Level.Notice);    //  50 000
    
TraceLevel(Level.Warn);      //  60 000
TraceLevel(Level.Error);     //  70 000
TraceLevel(Level.Severe);    //  80 000
TraceLevel(Level.Critical);  //  90 000
TraceLevel(Level.Alert);     // 100 000
TraceLevel(Level.Fatal);     // 110 000
TraceLevel(Level.Emergency); // 120 000
    
TraceLevel(Level.Off); //2147483647


private static void TraceLevel(log4net.Core.Level level)
{
   Debug.WriteLine("{0} = {1}", level, level.Value);
}


10

Diğerlerinin de belirttiği gibi, genellikle bu seviyeyi ve ondan daha ciddi olanları kaydetmek için minimum bir günlük kaydı seviyesi belirtmek tercih edilir. Görünüşe göre, sadece kayıt seviyelerini geriye doğru düşünüyorsunuz.

Bununla birlikte, tek tek seviyeleri günlüğe kaydetme üzerinde daha ayrıntılı denetim istiyorsanız, log4net'e aşağıdaki sözdizimini kullanarak yalnızca bir veya daha fazla belirli düzeyi kaydetmesini söyleyebilirsiniz:

<filter type="log4net.Filter.LevelMatchFilter">
  <levelToMatch value="WARN"/>
</filter>

Veya filtreye bir "reddet" düğümü ekleyerek belirli bir günlük kaydı düzeyini hariç tutmak için.

Birden çok düzeyi belirtmek için birden çok filtreyi bir arada yığınlayabilirsiniz. Örneğin, sadece WARN ve FATAL seviyelerini istiyorsanız. İstediğiniz seviyeler ardışıksa, LevelRangeFilter daha uygundur.

Başvuru Belgesi: log4net.Filter.LevelMatchFilter

Diğer cevaplar size yeterince bilgi vermediyse, umarım bu log4net'ten istediğinizi elde etmenize yardımcı olur.


Ah şahsen aradığım şey inkar. bilgi + hata mesajları istiyor ancak hata ayıklama istemiyor. Bunun için teşekkürler.
Sarfaraaz

by adding a "deny" node to the filterNasıl?
mrhotroad

@mrhotroad log4net'in mevcut sürümünün 2014'teki sürümden ne kadar farklı olduğundan emin değilim, ama işte LevelMatchFilter.AcceptOnMatch ile ilgili belge. logging.apache.org/log4net/release/sdk/html/… Böylece <levelToMatch value = "WARN" AcceptOnMatch = "false" /> yapabilirsiniz
ulty4life

8

Gerçek resmi belgeleri ( Apache log4net ™ Kılavuzu - Giriş ) aşağıdaki seviyelerin olduğunu belirtir ...

  • HERŞEY
  • DEBUG
  • BİLGİ
  • WARN
  • HATA
  • ÖLÜMCÜL
  • KAPALI

... ama tuhaf bir şekilde, log4net.dll derlemesini, v1.2.15.0 mühürlü sınıf log4net.Core.Level'i görüntülediğimde aşağıdaki seviyeleri tanımlı görüyorum ...

public static readonly Level Alert;
public static readonly Level All;
public static readonly Level Critical;
public static readonly Level Debug;
public static readonly Level Emergency;
public static readonly Level Error;
public static readonly Level Fatal;
public static readonly Level Fine;
public static readonly Level Finer;
public static readonly Level Finest;
public static readonly Level Info;
public static readonly Level Log4Net_Debug;
public static readonly Level Notice;
public static readonly Level Off;
public static readonly Level Severe;
public static readonly Level Trace;
public static readonly Level Verbose;
public static readonly Level Warn;

Uzun zamandır PostSharp OnBoundaryEntry ve OnBoundaryExit ile birlikte TRACE kullanıyorum. Bu diğer seviyelerin neden belgelerde olmadığını merak ediyorum. Dahası, tüm bu seviyelerin gerçek önceliği nedir?


2
Değeri ne olursa olsun, hepsi aşağıdaki bağlantıda listeleniyor, ancak kılavuzlarını bir süredir güncellememişler gibi görünüyor. logging.apache.org/log4net/release/sdk/html/…
Dinerdo

2
Seviye İnce; Seviye Daha İnce; En İyi Seviye; Bundan sonra bu üçünü kullanacağım.
maembe

-3

Böyle dene, benim için çalıştı

<root>
  <!--<level value="ALL" />-->
  <level value="ERROR" />
  <level value="INFO" />
  <level value="WARN" />     
</root>

Bu, 3 tür hatayı günlüğe kaydeder - hata, bilgi ve uyarı


7
Root Logger için log4net belgelerine göre : "level: İsteğe bağlı eleman, en fazla bir tane izin verilir . Bu logger için loglama seviyesini tanımlar. Bu logger sadece bu seviye veya üzerindeki olayları kabul eder . "
gonadarian

Bu cevap neden oy vermedi? Benim için de çalışıyor. Dolayısıyla oylama.
amilamad

1
Çünkü <level value = "WARN" /> yeterli olurdu.
rlesias
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.