ลำดับชั้น log4net และระดับการบันทึก


127

ไซต์นี้ระบุว่า

ผู้บันทึกอาจถูกกำหนดระดับ ระดับคืออินสแตนซ์ของคลาส log4net.Core.Level ระดับต่อไปนี้กำหนดตามลำดับความสำคัญที่เพิ่มขึ้น :

  • ทั้งหมด
  • DEBUG
  • ข้อมูล
  • เตือน
  • ข้อผิดพลาด
  • FATAL
  • ปิด

DEBUG ดูเหมือนจะมีลำดับความสำคัญต่ำสุดและ ERROR สูงกว่า

คำถาม

  • ถ้าฉันตั้งค่าต่ำสุดและสูงสุดตัวอย่าง DEBUG และ ERROR มันจะพิมพ์ทุกอย่าง DEBUG, INFO, WARN และ ERROR โดยไม่ต้องใช้ตัวกรองขั้นต่ำและสูงสุด ถ้าฉันระบุข้อผิดพลาด (ระดับการบันทึก = ข้อผิดพลาด) จะรวม DEBUG, INFO & WARN
 <filter type="log4net.Filter.LevelRangeFilter">
     <param name="LevelMin" value="ERROR"/>
     <param name="LevelMax" value="ERROR"/>
 </filter>

แทนตัวกรองขั้นต่ำและสูงสุด เป็นไปได้หรือไม่ที่จะกำหนดค่าระดับและรวมระดับอื่น ๆ ทั้งหมดไว้ด้านล่างสำหรับการบันทึก

ตัวอย่าง - ตั้งค่าระดับเป็น Error ซึ่งจะรวม DEBUG, INFO, WARN และ ERROR เป็นไปได้ด้วย log4net หรือไม่?

การโพสต์ log4net config ตามหนึ่งในความคิดเห็น:

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


คุณได้ลองตั้งค่าระดับการบันทึกเป็น INFO และตรวจสอบว่ามี INFO และ DEBUG หรือไม่
ค่าเริ่มต้น

5
ดูเหมือนว่า DEBUG จะมีลำดับความสำคัญต่ำสุดและ Error สูงที่สุด นี่ไม่ใช่ลำดับความสำคัญแต่จะมีการบันทึกขีด จำกัดหรือสูงกว่าข้อความ
R. Schreurs

คุณได้ลองใช้เท่านั้นlevelMaxหรือไม่? ฉันคิดว่านั่นควรรวมทุกอย่างไว้ด้านล่างหากคุณไม่ระบุlevelMin
AN

คำตอบ:


90

สิ่งนี้อาจช่วยให้เข้าใจสิ่งที่บันทึกไว้ในระดับที่ Loggers สามารถกำหนดระดับได้ ระดับคืออินสแตนซ์ของคลาส log4net.Core.Level ระดับต่อไปนี้กำหนดตามลำดับความรุนแรงที่เพิ่มขึ้น - ระดับบันทึก

จำนวนระดับที่บันทึกสำหรับแต่ละระดับการตั้งค่า:

 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
ขอโทษที่ฉันคิดว่านี่เป็น wswg ทำไมมันถึงไม่ ??
Mel Pama

1
คุณสามารถดูส่วนนี้ของเว็บไซต์เพื่อจัดรูปแบบคำตอบที่เหมาะสม
Jarod Moser

36

สำหรับแอปพลิเคชันส่วนใหญ่คุณต้องการกำหนดระดับต่ำสุด แต่ไม่ใช่ระดับสูงสุด

ตัวอย่างเช่นเมื่อดีบักโค้ดของคุณให้ตั้งค่าระดับต่ำสุดเป็น DEBUG และในการใช้งานจริงตั้งค่าเป็น WARN


โปรดตรวจสอบคำถามที่อัปเดตของฉันคำถามของฉันมีไว้สำหรับระดับและคำสั่งบันทึก
ศิวะ

เปลี่ยน<level value="ALL" /> เป็น<level value="WARN" />และคุณจะได้รับเฉพาะคำเตือนและข้อผิดพลาด
Ilya Kogan

2
ไม่มันไม่ช่วย ฉันพยายามที่จะเปลี่ยนแปลง ฉันไม่เห็นบันทึกสำหรับลำดับความสำคัญด้านล่าง
ศิวะ

12
แน่นอนว่าคุณจะไม่เห็นบันทึกด้านล่างลำดับความสำคัญ นั่นคือลำดับความสำคัญขั้นต่ำที่คุณกำหนด
Ilya Kogan

19

DEBUG จะแสดงข้อความทั้งหมด INFO ทั้งหมดนอกเหนือจากข้อความ DEBUG และอื่น ๆ
โดยปกติจะใช้ INFO หรือ WARN ขึ้นอยู่กับนโยบายของ บริษัท


โปรดตรวจสอบคำถามที่อัปเดตของฉันคำถามของฉันมีไว้สำหรับระดับและข้อความบันทึก
ศิวะ

โปรดโพสต์การกำหนดค่า log4Net ทั้งหมดของคุณคุณอาจมีคนตัดไม้สองคนที่รบกวน
weismat

และตอนนี้ฉันใช้เฉพาะการตั้งค่าระดับเท่านั้น ฉันคิดว่าควรหลีกเลี่ยงการตั้งค่า Min / Max ถ้าเป็นไปได้
weismat

ฉันโพสต์ log4net config ทั้งหมดแล้ว โปรดตรวจสอบ. ฉันพยายามเรียนรู้และนำไปใช้
ศิวะ

16

นี่คือโค้ดบางส่วนที่บอกเกี่ยวกับลำดับความสำคัญของระดับ 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);
}


10

ดังที่ผู้อื่นได้กล่าวไว้โดยปกติแล้วควรระบุระดับการบันทึกขั้นต่ำเพื่อบันทึกระดับนั้นและระดับอื่น ๆ ที่รุนแรงกว่าระดับนั้น ดูเหมือนว่าคุณกำลังคิดถึงระดับการบันทึกย้อนหลัง

อย่างไรก็ตามหากคุณต้องการการควบคุมที่ละเอียดยิ่งขึ้นในการบันทึกแต่ละระดับคุณสามารถบอกให้ log4net บันทึกระดับเฉพาะอย่างน้อยหนึ่งระดับโดยใช้ไวยากรณ์ต่อไปนี้:

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

หรือเพื่อไม่รวมระดับการบันทึกเฉพาะโดยการเพิ่มโหนด "ปฏิเสธ" ในตัวกรอง

คุณสามารถซ้อนตัวกรองหลายตัวเข้าด้วยกันเพื่อระบุหลายระดับ ตัวอย่างเช่นหากคุณต้องการเพียงระดับ WARN และ FATAL หากระดับที่คุณต้องการติดต่อกัน LevelRangeFilter จะเหมาะสมกว่า

เอกสารอ้างอิง: log4net.Filter.LevelMatchFilter

หากคำตอบอื่น ๆ ไม่ได้ให้ข้อมูลเพียงพอหวังว่านี่จะช่วยให้คุณได้รับสิ่งที่ต้องการจาก log4net


อาการปฏิเสธคือสิ่งที่ฉันกำลังมองหาเป็นการส่วนตัว ต้องการข้อมูล + ข้อความแสดงข้อผิดพลาด แต่ไม่สามารถแก้ไขข้อบกพร่อง ขอบคุณสำหรับสิ่งนี้.
Sarfaraaz

by adding a "deny" node to the filterอย่างไร
mrhotroad

@mrhotroad ฉันไม่แน่ใจว่า log4net เวอร์ชันปัจจุบันแตกต่างจากเวอร์ชันในปี 2014 อย่างไร แต่นี่คือเอกสารใน LevelMatchFilter.AcceptOnMatch logging.apache.org/log4net/release/sdk/html/…ดังนั้นคุณสามารถทำการ <levelToMatch value = "WARN" AcceptOnMatch = "false" />
ulty4life

8

เอกสารอย่างเป็นทางการ ( คู่มือ Apache log4net ™ - บทนำ ) ระบุว่ามีระดับต่อไปนี้ ...

  • ทั้งหมด
  • DEBUG
  • ข้อมูล
  • เตือน
  • ข้อผิดพลาด
  • FATAL
  • ปิด

... แต่แปลกเมื่อฉันดูแอสเซมบลี log4net.dll, v1.2.15.0 คลาสปิดผนึก log4net.Core ระดับฉันเห็นระดับต่อไปนี้ที่กำหนด ...

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;

ฉันใช้ TRACE ร่วมกับ PostSharp OnBoundaryEntry และ OnBoundaryExit มาเป็นเวลานาน ฉันสงสัยว่าทำไมระดับอื่น ๆ เหล่านี้ไม่อยู่ในเอกสารประกอบ นอกจากนี้อะไรคือลำดับความสำคัญที่แท้จริงของระดับเหล่านี้?


2
สำหรับสิ่งที่คุ้มค่าทั้งหมดนี้ระบุไว้ในลิงค์ต่อไปนี้ แต่ดูเหมือนว่าพวกเขาจะไม่ได้อัปเดตคู่มือสักพัก logging.apache.org/log4net/release/sdk/html/…
Dinerdo

2
ระดับดี; ระดับปลีกย่อย; ระดับที่ดีที่สุด; ฉันจะใช้สามตัวนี้ต่อจากนี้
maembe

-3

ลองแบบนี้มันได้ผลสำหรับฉัน

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

บันทึกข้อผิดพลาด 3 ประเภท ได้แก่ ข้อผิดพลาดข้อมูลและคำเตือน


7
ตามเอกสาร log4netสำหรับ Root Logger: "ระดับ: องค์ประกอบทางเลือกสูงสุด 1 รายการที่อนุญาตกำหนดระดับการบันทึกสำหรับคนตัดไม้นี้คนตัดไม้นี้จะยอมรับเฉพาะเหตุการณ์ที่อยู่ในระดับนี้ขึ้นไป "
gonadarian

ทำไมคำตอบนี้จึงให้คะแนนโหวต? มันทำงานสำหรับฉันด้วย ดังนั้นการโหวต
amilamad

1
เนื่องจาก <level value = "WARN" /> จะเพียงพอ
rlesias
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.