2014-09-09 4 views
0

가끔 Debug 모드로 로그인하고 싶습니다. 불행히도 내가 재건 할 수없는 써드 파티 라이브러리와 연결된다. 그것은 log4net을 사용하도록 제작되었으며 Debug 모드에서는 매우 장황합니다.프로젝트를 기록에서 제외시키는 방법이 있습니까?

해당 라이브러리에서 알림을 받고 싶지 않습니다. 그러나 나는 쓰고 자하는 다른 모든 코드로부터 로그 통보를 받고 싶다.

SMTPAppender 또는 RollingFile Appender 작가를 사용할 때 네임 스페이스 또는 라이브러리에서 로깅을 제외 할 수 있습니까?

답변

1

필터를 사용할 수 있습니다. 예 :

<filter type="log4net.Filter.LoggerMatchFilter"> 
    <!-- allows this sub-namespace to be logged... --> 
    <loggerToMatch value="Noisy.Namespace.But.Important" /> 
</filter> 
<filter type="log4net.Filter.LoggerMatchFilter"> 
    <!-- ...but not the rest of it --> 
    <loggerToMatch value="Noisy.Namespace" /> 
    <acceptOnMatch value="false" /> 
</filter> 

자세한 내용은 article.

1

임은 당신이 당신의 로깅 인프라의 루트 레벨을 설정 구성을 사용하고 있는지 상상 : 로거 이름을 사용하여 로깅의 다른 수준을 정의 할 수 있습니다 그러나

<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="A1" /> 
</root> 

합니다. 귀하 또는 타사 응용 프로그램이 표준 관행을 따랐 경우 로거

  • MyApp.Main
  • MyApp.Business
  • 의 MyApp라는 것, 그래서 당신 로거는, 그들이 네임 스페이스와 함께 살고있는 클래스의 이름을 따서 명명된다. Business.Messages
  • ThirdParty.API
  • 등 ...이 경우에 할 수있는 일

네임 스페이스 르에서 로깅을 선언하다 VEL에 관심이있어. 예를 들어 다음과 같은

<logger name="MyApp.Main"> 
    <level value="DEBUG" /> 
    <appender-ref ref="A1" /> 
</logger> 

을 추가하고 root 수준에서 모든 어 펜더를 제거하는 것만 MyApp.Main에서 살고 로그인 할. 그런 다음 MyApp 이름 아래에있는 로거 만 기록합니다. 자세한 내용은 the documentation을 참조하십시오.

불행하고 로거가이 계층 구조를 준수하지 않는 경우에도 첨부 파일에서 LoggerMatchFilter을 사용하여 필터링 할 수 있습니다. 이렇게하면 로거가 전달할 수있는 항목이나 로거가 수행 할 수없는 항목을 정의 할 수 있습니다. 이 많이 있습니다. 언제든지 둘러 볼 수 있습니다.

+0

예 할 수 있습니다. 그러나 로깅을 유지하고 싶은 제 3 자 도서관이 많이 있습니다. 내가 포함 규칙보다 더 많은 제외 규칙을 찾고 있습니다. 당신이 제안하는 필터링은 유망 해 보입니다. – chollida

+1

실제로 로거 계층 구조가 여러 개인 경우 모든 것을 사용자 정의하는 것이 더 귀찮습니다. 'LoggerMatchFilter'는이 경우 훨씬 더 나은 해결책입니다 – samy

관련 문제