log4net phân cấp và mức ghi nhật ký


127

Trang web này nói

Loggers có thể được chỉ định cấp. Các mức là các thể hiện của lớp log4net.Core.Level. Các mức sau đây được xác định theo thứ tự ưu tiên tăng dần :

  • TẤT CẢ
  • GỬI
  • THÔNG TIN
  • CẢNH BÁO
  • LỖI
  • BẠC
  • TẮT

DEBUG dường như có mức độ ưu tiên thấp nhất và LRI cao hơn.

Câu hỏi

  • Nếu tôi đặt ví dụ Min và Max DEBUG và ERROR, nó sẽ in mọi thứ DEBUG, INFO, WARN và ERROR. Không sử dụng bộ lọc tối thiểu và tối đa. Nếu tôi chỉ định ERROR (Mức ghi nhật ký = ERROR) thì nó có bao gồm DEBUG, INFO & WARN không
 <filter type="log4net.Filter.LevelRangeFilter">
     <param name="LevelMin" value="ERROR"/>
     <param name="LevelMax" value="ERROR"/>
 </filter>

Thay vì bộ lọc tối thiểu và tối đa. Có thể cấu hình một cấp độ và bao gồm tất cả các cấp độ khác bên dưới nó để đăng nhập.

Ví dụ - Đặt mức độ là Lỗi, nó sẽ bao gồm DEBUG, INFO, WARN và ERROR. Điều này có thể với log4net không?

Đăng cấu hình log4net dựa trên một trong các ý kiến:

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


Bạn đã thử đặt mức ghi nhật ký thành INFO và kiểm tra xem nó có bao gồm INFO và DEBUG không?
Mặc định

5
DEBUG dường như có mức ưu tiên thấp nhất và Lỗi là cao nhất. Đây không phải là một ưu tiên , nhưng một ngưỡng lên hoặc cao hơn một tin nhắn sẽ được ghi lại.
R. Schreurs

Bạn đã thử chỉ sử dụng levelMax? Tôi nghĩ rằng nên bao gồm mọi thứ bên dưới nó nếu bạn không chỉ địnhlevelMin
AN

Câu trả lời:


90

Điều này có thể giúp hiểu những gì được ghi lại ở cấp độ nào Trình ghi nhật ký có thể được chỉ định cấp. Các mức là các thể hiện của lớp log4net.Core.Level. Các cấp độ sau được xác định theo thứ tự mức độ nghiêm trọng tăng dần - Cấp độ nhật ký.

Số cấp được ghi cho mỗi cấp cài đặt:

 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
Xin lỗi tôi nghĩ đây là wswg, tại sao nó không ??
Mel Pama

1
Bạn có thể xem phần này của trang web để định dạng câu trả lời thích hợp
Jarod Moser

36

Đối với hầu hết các ứng dụng, bạn muốn đặt mức tối thiểu nhưng không phải là mức tối đa.

Ví dụ: khi gỡ lỗi mã của bạn, đặt mức tối thiểu thành DEBUG và trong sản xuất, đặt mã thành WARN.


Vui lòng kiểm tra câu hỏi cập nhật của tôi, Câu hỏi của tôi dành cho các cấp độ và báo cáo nhật ký
Siva

Thay đổi <level value="ALL" /> thành <level value="WARN" />và bạn sẽ chỉ nhận được các cảnh báo và lỗi.
Ilya Kogan

2
Không, nó không giúp được gì. Tôi đã cố gắng thay đổi. Tôi không thấy nhật ký được ưu tiên dưới đây
Siva

12
Tất nhiên bạn sẽ không thấy các bản ghi dưới mức ưu tiên. Đó là ưu tiên tối thiểu bạn đang đặt.
Ilya Kogan

19

DEBUG sẽ hiển thị tất cả các tin nhắn, INFO tất cả ngoài các tin nhắn DEBUG, v.v.
Thông thường người ta sử dụng INFO hoặc WARN. Điều này phụ thuộc vào chính sách của công ty.


Vui lòng kiểm tra câu hỏi cập nhật của tôi, Câu hỏi của tôi dành cho các cấp độ và báo cáo nhật ký
Siva

Vui lòng gửi toàn bộ cấu hình log4Net của bạn, bạn có thể có hai logger đang can thiệp.
weismat

Và cá nhân tôi chỉ sử dụng cài đặt cấp độ cho đến nay. Tôi nghĩ nên tránh cài đặt Min / Max nếu có thể.
weismat

Tôi đã đăng toàn bộ cấu hình log4net. Hãy kiểm tra. Tôi đang cố gắng học hỏi và thực hiện.
Siva

16

Đây là một số mã nói về mức độ ưu tiên của tất cả các cấp 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

Như những người khác đã lưu ý, thông thường nên chỉ định mức ghi nhật ký tối thiểu để ghi mức đó và bất kỳ mức nào khác nghiêm trọng hơn mức đó. Có vẻ như bạn chỉ nghĩ về các cấp độ đăng nhập ngược.

Tuy nhiên, nếu bạn muốn kiểm soát chi tiết hơn đối với việc ghi nhật ký các cấp riêng lẻ, bạn có thể yêu cầu log4net chỉ ghi nhật ký một hoặc nhiều cấp cụ thể bằng cú pháp sau:

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

Hoặc để loại trừ một mức ghi nhật ký cụ thể bằng cách thêm nút "từ chối" vào bộ lọc.

Bạn có thể xếp chồng nhiều bộ lọc lại với nhau để chỉ định nhiều cấp độ. Chẳng hạn, nếu bạn chỉ muốn mức WARN và FATAL. Nếu các cấp độ bạn muốn là liên tiếp, thì LevelRangeFilter phù hợp hơn.

Tài liệu tham khảo: log4net.Filter.LevelMatchFilter

Nếu các câu trả lời khác không cung cấp cho bạn đủ thông tin, hy vọng điều này sẽ giúp bạn có được những gì bạn muốn từ log4net.


ah từ chối là những gì tôi, cá nhân, đã tìm kiếm. muốn thông tin + thông báo lỗi nhưng không gỡ lỗi. cảm ơn vì điều đó.
Sarfaraaz

by adding a "deny" node to the filterlàm sao?
mrhotroad

@mrhotroad Tôi không chắc phiên bản log4net hiện tại khác với phiên bản 2014 như thế nào, nhưng đây là tài liệu trên LevelMatchFilter.AcceptOnMatch. log.apache.org/log4net/release/sdk/html/ Từ Vì vậy, bạn có thể thực hiện <levelToMatch value = "WARN" AcceptOnMatch = "false" />
ulty4life

8

Đúng là tài liệu chính thức ( Hướng dẫn sử dụng Apache log4net ™ - Giới thiệu ) có các cấp độ sau ...

  • TẤT CẢ
  • GỬI
  • THÔNG TIN
  • CẢNH BÁO
  • LỖI
  • BẠC
  • TẮT

... nhưng thật kỳ lạ khi tôi xem tập hợp log4net.dll, v1.2.15.0 lớp niêm phong log4net.Core.Level Tôi thấy các mức sau được định nghĩa ...

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;

Tôi đã sử dụng TRACE kết hợp với PostSharp OnBoundaryEntry và OnBoundaryExit trong một thời gian dài. Tôi tự hỏi tại sao các cấp độ khác không có trong tài liệu. Hơn nữa, ưu tiên thực sự của tất cả các cấp là gì?


2
Để biết giá trị của nó, tất cả chúng đều được liệt kê ở liên kết sau, nhưng dường như chúng chưa cập nhật hướng dẫn sử dụng của chúng trong một thời gian. logging.apache.org/log4net/release/sdk/html/...
Dinerdo

2
Cấp độ tốt; Cấp độ hoàn thiện; Cấp độ tốt nhất; Tôi sẽ sử dụng ba từ bây giờ.
maembe

-3

Hãy thử như thế này, nó làm việc cho tôi

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

Điều này ghi lại 3 loại lỗi - lỗi, thông tin và cảnh báo


7
Theo tài liệu log4net cho Root Logger: "level: Phần tử tùy chọn, tối đa là một cho phép . Xác định mức ghi nhật ký cho logger này. Trình ghi này sẽ chỉ chấp nhận sự kiện ở cấp độ này hoặc cao hơn. "
gonadarian

Tại sao câu trả lời này đã bỏ phiếu? Nó cũng làm việc cho tôi. Do đó bỏ phiếu.
amilamad

1
Bởi vì <level value = "WARN" /> sẽ có hiệu lực.
rlesias
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.