log4net 계층 및 로깅 수준


127

이 사이트 는 말한다

로거에는 레벨이 할당 될 수 있습니다. 레벨은 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>


로깅 수준을 INFO로 설정하고 INFO 및 DEBUG가 포함되어 있는지 확인 했습니까?
기본적으로

5
DEBUG는 우선 순위가 가장 낮고 오류가 가장 높습니다. 이것은 우선 순위 가 아니지만 메시지보다 높거나 높은 임계 값 이 기록됩니다.
R. Schreurs 2013

을 사용하여 시도해 보셨습니까 levelMax? 다음을 지정하지 않으면 그 아래의 모든 내용이 포함되어야한다고 생각합니다.levelMin
AN

답변:


90

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

1
당신은 좀 걸릴 수 있습니다 사이트의이 부분 답변의 형식이 올바른지에 대한
Jarod 모저에게

36

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

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


내 업데이트 된 질문을 확인하시기 바랍니다, 내 질문은 레벨과 로그 문입니다
시바

변경 <level value="ALL" /> 으로 <level value="WARN" />당신은 단지 경고 및 오류를 얻을 수 있습니다.
Ilya Kogan

2
도움이되지 않습니다. 나는 변화를 시도했다. 아래 우선 순위에 대한 로그를 보지 못했습니다
Siva

12
물론 우선 순위 아래의 로그는 볼 수 없습니다. 그것은 당신이 설정 하는 최소 우선 순위입니다.
Ilya Kogan

19

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


내 업데이트 된 질문을 확인하시기 바랍니다, 내 질문은 레벨과 로그 문입니다
시바

전체 log4Net 구성을 게시하십시오. 간섭하는 두 개의 로거가있을 수 있습니다.
weismat

그리고 지금까지 개인적으로 레벨 설정 만 사용했습니다. 가능한 한 최소 / 최대 설정은 피해야한다고 생각합니다.
weismat

전체 log4net 구성을 게시했습니다. 확인해주십시오. 나는 배우고 구현하려고 노력하고 있습니다.
Siva

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 ™ 매뉴얼-소개 )에는 다음과 같은 레벨이 있다고 명시되어 있습니다.

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

...하지만 이상하게도 어셈블리 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를 사용해 왔습니다. 이 다른 레벨이 문서에없는 이유가 궁금합니다. 또한이 모든 수준의 진정한 우선 순위는 무엇입니까?


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 문서 에 따르면루트 로거에 대한 에 "레벨 : 선택적 요소, 최대 1 개 허용 .이 로거의 로깅 레벨을 정의합니다.이 로거는 이 레벨 이상의 이벤트 만 허용 합니다. "
gonadarian

이 답변이 왜 반대표를 주었습니까?. 그것은 나에게도 효과가 있습니다. 따라서 투표.
amilamad

1
<level value = "WARN"/>이면 충분했기 때문입니다.
rlesias
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.