2014-12-29 6 views
0

INFO 로그 메시지에 예외가 포함되어 있으면 INFO 로그 수준을 WARN으로 변환하려고합니다. 어쨌든 내가이 일을 할 수 있니? (.NET 응용 프로그램에서 log4net을 통합하려고합니다.)로그 수준 변환 (log4net)

답변

0

로깅 호출을 이미 랩핑하지 않은 경우 log4net에 전달하기 전에 메시지를 가로 챌 수있는 가장 좋은 방법은 로그를 승격시키는 고유 한 애 퍼처를 만드는 것입니다 적절한 이벤트.

<appender name="DatabaseAppender" 
      type="Your.Namespace.Here.PromotingAdoNetAppender"> 
      … 
: 당신이해야 할 모든 당신의 설정에이 어 펜더 유형을 선언하는 것입니다 그리고

public static class AppenderExtensions 
{ 
    public static LoggingEvent Promote(this LoggingEvent loggingEvent) 
    { 
     if (loggingEvent.Level != Level.Info 
     || loggingEvent.ExceptionObject == null) 
     { 
      return loggingEvent; 
     } 

     var data = loggingEvent.GetLoggingEventData(FixFlags.All); 
     data.Level = Level.Warn; 
     return new LoggingEvent(data); 
    } 
} 

public class PromotingAdoNetAppender : AdoNetAppender 
{ 
    protected override void Append(LoggingEvent loggingEvent) 
    { 
     base.Append(loggingEvent.Promote()); 
    } 
} 

public class PromotingRollingFileAppender : RollingFileAppender 
{ 
    protected override void Append(LoggingEvent loggingEvent) 
    { 
     base.Append(loggingEvent.Promote()); 
    } 
} 

: 동일한 코드를 필요 각 펜더 서브 클래스로 나는 실제 승진을하지 확장 메서드를 만들었습니다

+0

코드 스 니펫을 보내 주셔서 감사합니다. 첫 번째 제안에 따라 log4net 로거 주위에 래퍼를 만들었습니다. 이렇게하면 사용자 정의 로거를 사용할 필요없이 원하는 결과를 얻을 수 있습니다. – TheGuest