hierarki log4net dan tingkat logging

127

Situs ini mengatakan

Penebang mungkin diberi level. Level adalah instance dari kelas log4net.Core.Level. Tingkat berikut ditentukan dalam urutan peningkatan prioritas :

  • SEMUA
  • DEBUG
  • INFO
  • MEMPERINGATKAN
  • KESALAHAN
  • FATAL
  • MATI

DEBUG tampaknya memiliki prioritas terendah dan ERROR lebih tinggi.

Pertanyaan

  • Jika saya mengatur Min dan Max contoh DEBUG dan ERROR akan mencetak semua DEBUG, INFO, WARN dan ERROR. Tanpa menggunakan filter min dan max. Jika saya menentukan ERROR (Logging level = ERROR) Apakah itu termasuk DEBUG, INFO & WARN
 <filter type="log4net.Filter.LevelRangeFilter">
     <param name="LevelMin" value="ERROR"/>
     <param name="LevelMax" value="ERROR"/>
 </filter>

Alih-alih filter min dan maks. Apakah mungkin untuk mengonfigurasi level dan menyertakan semua level lain di bawahnya untuk logging.

Contoh - Setel level sebagai Error yang akan menyertakan DEBUG, INFO, WARN, dan ERROR. Apakah ini mungkin dengan log4net?

Memposting konfigurasi log4net berdasarkan salah satu komentar:

     <?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>

Siva
sumber
sudahkah Anda mencoba menyetel tingkat logging ke INFO dan memeriksa apakah itu termasuk INFO dan DEBUG?
Default
5
DEBUG tampaknya memiliki prioritas terendah dan Kesalahan tertinggi. Ini bukan prioritas , tetapi ambang ke atas atau di atas pesan akan dicatat.
R. Schreurs
Sudahkah Anda mencoba hanya menggunakan levelMax? Saya pikir itu harus mencakup semua yang ada di bawahnya jika Anda tidak menentukanlevelMin
AN

Jawaban:

90

Ini mungkin membantu untuk memahami apa yang dicatat pada level apa Logger dapat ditetapkan levelnya. Level adalah instance dari kelas log4net.Core.Level. Tingkat berikut ditentukan dalam urutan peningkatan keparahan - Tingkat Log.

Jumlah level yang direkam untuk setiap level pengaturan:

 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
Mel Pama
sumber
2
Maaf saya pikir ini wswg, kenapa tidak ??
Mel Pama
1
Anda dapat melihat bagian situs ini untuk format jawaban yang tepat
Jarod Moser
36

Untuk sebagian besar aplikasi, Anda ingin menetapkan level minimum tetapi bukan level maksimum.

Misalnya, saat men-debug kode Anda, setel level minimum ke DEBUG, dan dalam produksi setel ke WARN.

Ilya Kogan
sumber
Silakan periksa pertanyaan saya yang diperbarui, Pertanyaan saya adalah untuk level dan pernyataan log
Siva
Ubah <level value="ALL" /> menjadi <level value="WARN" />dan Anda hanya akan mendapatkan peringatan dan kesalahan.
Ilya Kogan
2
Tidak itu tidak membantu. Saya mencoba untuk berubah. Saya tidak melihat log untuk prioritas di bawah ini termasuk
Siva
12
Tentu saja Anda tidak akan melihat log di bawah prioritas. Itu adalah prioritas minimum yang Anda tetapkan.
Ilya Kogan
19

DEBUG akan menampilkan semua pesan, INFO semua kecuali pesan DEBUG, dan seterusnya.
Biasanya seseorang menggunakan INFO atau WARN. Ini tergantung pada kebijakan perusahaan.

weismat
sumber
Silakan periksa pertanyaan saya yang diperbarui, Pertanyaan saya adalah untuk level dan pernyataan log
Siva
Silakan posting seluruh konfigurasi log4Net Anda, Anda mungkin memiliki dua logger yang mengganggu.
weismat
Dan saya pribadi hanya menggunakan pengaturan level sejauh ini. Saya pikir pengaturan Min / Max harus dihindari jika memungkinkan.
weismat
Saya telah memposting konfigurasi log4net secara keseluruhan. Silakan periksa. Saya mencoba untuk belajar dan menerapkan.
Siva
16

Berikut adalah beberapa kode yang menceritakan tentang prioritas semua level log4net:

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

Mohamed-ali MAAMAR
sumber
10

Seperti yang telah dicatat orang lain, biasanya lebih baik untuk menentukan tingkat penebangan minimum untuk mencatat tingkat itu dan tingkat lainnya yang lebih parah daripada itu. Sepertinya Anda hanya memikirkan tentang level logging mundur.

Namun, jika Anda menginginkan kontrol yang lebih cermat atas pencatatan tingkat individu, Anda dapat memberi tahu log4net untuk mencatat hanya satu atau beberapa tingkat tertentu menggunakan sintaks berikut:

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

Atau untuk mengecualikan tingkat logging tertentu dengan menambahkan node "tolak" ke filter.

Anda dapat menumpuk beberapa filter bersama untuk menentukan beberapa level. Misalnya, jika Anda hanya menginginkan level WARN dan FATAL. Jika level yang Anda inginkan berurutan, maka LevelRangeFilter lebih sesuai.

Dokumen Referensi: log4net.Filter.LevelMatchFilter

Jika jawaban lain belum memberi Anda informasi yang cukup, mudah-mudahan ini akan membantu Anda mendapatkan apa yang Anda inginkan dari log4net.

ulty4life
sumber
ah penyangkalan adalah apa yang saya, secara pribadi, cari. ingin info + pesan kesalahan tetapi tidak men-debug. Terima kasih untuk ini.
Sarfaraaz
by adding a "deny" node to the filterbagaimana?
mrhotroad
@mrhotroad Saya tidak yakin betapa berbedanya versi log4net saat ini dari versi tahun 2014, tetapi inilah dokumen di LevelMatchFilter.AcceptOnMatch. logging.apache.org/log4net/release/sdk/html/… Jadi Anda dapat melakukan <levelToMatch value = "WARN" AcceptOnMatch = "false" />
ulty4life
8

Benar, dokumentasi resmi ( Apache log4net ™ Manual - Pendahuluan ) menyatakan bahwa ada level berikut ...

  • SEMUA
  • DEBUG
  • INFO
  • MEMPERINGATKAN
  • KESALAHAN
  • FATAL
  • MATI

... tetapi anehnya ketika saya melihat assembly log4net.dll, v1.2.15.0 kelas tertutup log4net.Core.Level saya melihat level berikut ditentukan ...

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;

Saya telah menggunakan TRACE sehubungan dengan PostSharp OnBoundaryEntry dan OnBoundaryExit untuk waktu yang lama. Saya bertanya-tanya mengapa level lain ini tidak ada dalam dokumentasi. Selanjutnya, apa prioritas sebenarnya dari semua tingkatan ini?

barrypicker
sumber
2
Untuk apa nilainya, mereka semua tercantum di tautan berikut, tetapi mereka belum memperbarui manual mereka untuk beberapa saat tampaknya. logging.apache.org/log4net/release/sdk/html/…
Dinerdo
2
Tingkat Halus; Level Lebih Baik; Level Finest; Saya hanya akan menggunakan ketiganya mulai sekarang.
maembe
-3

Coba seperti ini, itu berhasil untuk saya

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

Ini mencatat 3 jenis kesalahan - kesalahan, info, dan peringatan

Dhananjay
sumber
7
Menurut dokumen log4net untuk Root Logger: "level: Elemen opsional, maksimum satu yang diizinkan . Menentukan tingkat logging untuk logger ini. Logger ini hanya akan menerima peristiwa yang ada di level ini atau di atasnya. "
gonadarian
Mengapa jawaban ini telah memberikan suara rendah?. Ini bekerja untuk saya juga. Karenanya up voting.
amilamad
1
Karena <level value = "WARN" /> sudah cukup.
rlesias