[C#] log4net 계층 및 로깅 수준

이 사이트 는 말한다

로거에는 레벨이 할당 될 수 있습니다. 레벨은 log4net.Core.Level 클래스의 인스턴스입니다. 다음 수준은 우선 순위가 높은 순서로 정의됩니다 .

  • 모두
  • 디버그
  • 정보
  • 경고
  • 오류
  • 치명적인
  • 떨어져서

DEBUG는 우선 순위가 가장 낮고 ERROR가 더 높습니다.

질문

  • Min 및 Max 예제 DEBUG 및 ERROR를 설정하면 DEBUG, INFO, WARN 및 ERROR가 모두 인쇄됩니다. 최소 및 최대 필터를 사용하지 않습니다. ERROR (로깅 수준 = ERROR)를 지정하면 DEBUG, INFO 및 WARN이 포함됩니까?
 <filter type="log4net.Filter.LevelRangeFilter">
     <param name="LevelMin" value="ERROR"/>
     <param name="LevelMax" value="ERROR"/>
 </filter>

최소 및 최대 필터 대신. 수준을 구성하고 로깅을 위해 그 아래에있는 다른 모든 수준을 포함 ​​할 수 있습니까?

예-레벨을 오류로 설정하면 DEBUG, INFO, WARN 및 ERROR가 포함됩니다. log4net으로 가능합니까?

댓글 중 하나를 기반으로 log4net 구성 게시 :

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



답변

이것은 로거에 레벨이 할당 될 수있는 레벨에서 기록 된 내용을 이해하는 데 도움이 될 수 있습니다. 레벨은 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


답변

대부분의 응용 프로그램에서는 최소 수준을 설정하지만 최대 수준은 설정하지 않습니다.

예를 들어 코드를 디버깅 할 때 최소 수준을 DEBUG로 설정하고 프로덕션에서는 WARN으로 설정합니다.


답변

DEBUG는 모든 메시지를 표시하고 INFO는 DEBUG 메시지 외에 모두 표시합니다.
일반적으로 INFO 또는 WARN을 사용합니다. 이것은 회사 정책에 따라 다릅니다.


답변

다음은 모든 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);
}


답변

다른 사람들이 언급했듯이 일반적으로 최소 로깅 수준을 지정하여 해당 수준과 그보다 더 심각한 수준을 기록하는 것이 좋습니다. 로깅 수준을 거꾸로 생각하는 것 같습니다.

그러나 개별 레벨 로깅을보다 세밀하게 제어하려면 다음 구문을 사용하여 하나 이상의 특정 레벨 만 로깅하도록 log4net에 지시 할 수 있습니다.

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

또는 필터에 “거부”노드를 추가하여 특정 로깅 수준을 제외합니다.

여러 필터를 함께 쌓아 여러 수준을 지정할 수 있습니다. 예를 들어 WARN 및 FATAL 수준 만 원할 경우. 원하는 수준이 연속적이면 LevelRangeFilter가 더 적합합니다.

참조 문서 : log4net.Filter.LevelMatchFilter

다른 답변으로 충분한 정보를 얻지 못했다면 log4net에서 원하는 것을 얻는 데 도움이되기를 바랍니다.


답변

공식 문서 ( Apache log4net ™ 매뉴얼-소개 )에는 다음과 같은 레벨이 있다고 명시되어 있습니다.

  • 모두
  • 디버그
  • 정보
  • 경고
  • 오류
  • 치명적인
  • 떨어져서

…하지만 이상하게도 어셈블리 log4net.dll, v1.2.15.0 봉인 클래스 log4net.Core.Level을 볼 때 다음 수준이 정의되어 있습니다 …

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;

나는 오랫동안 PostSharp OnBoundaryEntry 및 OnBoundaryExit와 함께 TRACE를 사용해 왔습니다. 이 다른 레벨이 문서에없는 이유가 궁금합니다. 또한이 모든 수준의 진정한 우선 순위는 무엇입니까?


답변

이렇게 해봐, 그것은 나를 위해 일했다

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

오류, 정보 및 경고의 3 가지 유형의 오류를 기록합니다.