2013-03-28 3 views
0

log4net을 사용하는 타사 어셈블리를 사용하고 있습니다. 문제가되는 어셈블리는 너무 자주 "정보"로그 수준에 기록됩니다. 이로 인해 내 응용 프로그램에 원치 않는 많은 잡음이 발생합니다.log4net 특정 어셈블리의 로그 수준을 어떻게 설정합니까?

특정 어셈블리에 대해 다른 로그 수준을 구성 할 수있는 방법이 있습니까?

답변

4

예, 일종의. 구성 파일 내에서 로거 이름을 기반으로 값을 설정하는 방법이 있습니다. 나는 파일의 나머지 부분을 쉽게 남겨두고 있지만, 파일에 다음과 같은 루트 섹션이 있어야합니다.

이제 다른 로거에 대한 추가 섹션을 추가하기 만하면됩니다. 예를 들어

:

<root>   
    <level value="ERROR" />  
    <appender-ref ref="RollingFile" /> 
</root>  
<logger name="ServiceLib"> 
    <level value="DEBUG"/> 
</logger> 

당신이 유형을 전달하여 로거를 작성하는 경우이 작동합니다. 이름은 클래스의 네임 스페이스를 기반으로합니다. 이처럼 :

private static readonly ILog log = LogManager.GetLogger(typeof(ServiceLib.MyWebService)); 

는 희망이 당신을 위해 작동합니다. 수동에서

1

: 당신은 어셈블리의 패키지 어셈블리 만 캔을 위해 그것을 할 수 없습니다

http://logging.apache.org/log4net/release/manual/configuration.html

. 따라서 어셈블리 패키지가 모두 Com.Foo로 시작하면 다음에 나오는 구성은 원하는 것을 수행하고 로깅을 WARN 레벨 이상으로 제한하므로 INFO 로깅이 나타나지 않습니다.

<log4net> 
    <!-- A1 is set to be a ConsoleAppender --> 
    <appender name="A1" type="log4net.Appender.ConsoleAppender"> 

     <!-- A1 uses PatternLayout --> 
     <layout type="log4net.Layout.PatternLayout"> 
      <!-- Print the date in ISO 8601 format --> 
      <conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" /> 
     </layout> 
    </appender> 

    <!-- Set root logger level to DEBUG and its only appender to A1 --> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="A1" /> 
    </root> 

    <!-- Print only messages of level WARN or above in the package Com.Foo --> 
    <logger name="Com.Foo"> 
     <level value="WARN" /> 
    </logger> 
</log4net> 

당신이 (유형 이름을 기반으로 로깅)이 규칙을 따르지 않는 사용하는 lib 디렉토리, 당신은에 대해 "Com.Foo의"해방 로깅에 사용하는 문자열입니다 어떤 파일을 기록 당신을 확인하고 변경해야하는 경우 그 문자열.

관련 문제