2010-05-14 10 views
5

내가 FATALDEBUG 내 log4net 로거의 minLevelmaxLevel 각각 설정 말,하지만 일부 시나리오에서 나는 WARN 수준에 기록 된 로그 항목을 소거하고, 다른 모든을 유지하려면 활성 범위의 레벨.log4net과 범위 내에서 여러 가지 로그 수준을 폐기

minLevelmaxLevel을 사용하여 범위를 지정하는 대신 어떻게 '분리 된'로그 수준을 사용할 수 있습니까?

나는 이것이 간단해야한다고 가정하지만,이 문제를 다루는 log4net 문서 나 예제를 찾지 못했습니다.

답변

7

귀하의 appender에 LevelMatchFilter을 사용할 수 있습니다.

예 :

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="DEBUG" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="INFO" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="ERROR" /> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
    ... 
</appender> 

이 예에만 인쇄 DEBUG 것이다; INFO 및 ERROR 메시지. 필요에 따라 쉽게 사용자 정의 할 수 있습니다.

참고 : DenyAllFilter을 잊지 마세요.

+0

안녕하세요! 빠른 답장을 보내 주셔서 감사합니다. 프로그래밍 방식으로 완료 할 수 있습니까? Logger의 (루트) 로그 레벨을 변경하는 방법을 찾았습니다. 각각의 appenders가 아닙니다. –

+0

죄송합니다, 귀하의 의견을 싶었어요. 프로그래밍 방식으로도 가능해야합니다. 여기에 모든 애펜서에 접근하는 방법을 볼 수 있습니다 : http://stackoverflow.com/questions/3016108/change-log4net-conversion-pattern-or-layout-at-runtime/3031867#3031867 –

0

사용 LevelRangeFilter

<filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMax value="FATAL" /> 
    <levelMin value="ERROR" /> 
</filter> 
+2

안녕하세요, 자연스러운 사용법입니다. 양식, 나는이 옵션을 시도했지만 그것은 또한 * 치명적인 오류 사이에 수준 (* 오류 및 치명적인 경우에도 원칙이 여전히 적용됩니다) 메시지를 기록하도록 강요합니다. 어쨌든 고마워, ! –

2

그것은 모든 원하는 출력을 달성하기 위해 결합 할 수있는 방법을 log4net 필터 멋지다. 기본적으로 모든 로그 항목에는 "중립"필터 처리가 있고 log4net은 기본적으로 중립 인 모든 항목을 기록합니다.

무엇 LevelRangeFilter 할 것하면 항목의 레벨이 범위에있는 경우, 그것은 "동의"하는 필터 처분을 설정합니다 (또는이 acceptOnMatch 매개 변수가 false로 설정되어있는 경우였다로서의 처분을 떠나)을하고있다 "거부"처분으로 범위에 포함되지 않은 모든 항목을 표시합니다.

LevelMatchFilter 다음은, 타의 추종을 불허하는 항목들이 무엇인지에 남아있을 것 "거부"로 일치하는 항목을 설정할 것이라고 acceptToMatchfalse로 설정되어 있지 않으면 "동의"로 levelToMatch 매개 변수에 지정된 필터의 처분을 설정합니다 전에.

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMax value="FATAL" /> 
     <levelMin value="ERROR" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="WARN" /> 
     <acceptOnMatch value="false" /> 
    </filter> 
</appender> 

이 쉽게가에 수준을 경고 Off로 토글 수 :

은 그래서 당신이 할 수있는 것은 당신이 원하는 것을 얻을 수있는 두 개의 필터의 조합을 사용합니다. 범위를 벗어나는 모든 항목은 이미 모두 "Deny"로 표시되어 있으며 LevelMatchFilter은 WARN 수준 항목을 Deny로 표시하므로 DenyAllFilter은 필요하지 않습니다.

관련 문제