2011-04-18 2 views
6

익명 메소드에서 로깅하는 클래스가 있습니다. 내가생성 된 클로저 클래스 이름이 아닌 실제 클래스 이름을 log4net에 추가 할 수 있습니까?

public class SocketFlusher 
{ 
    private static readonly ILog Log = LogManager.GetLogger(typeof(SocketFlusher)); 

    public void Flush() 
    { 
     Wait.For(timeout,() => 
     { 
      ... // work 
      Log.DebugFormat("{0} bytes available", socket.Available); 
     } 
    } 
} 

내 log4net 구성이 좋다 ... 지점을 만들기 위해 그것을 아래로 무식하게했습니다 (필자는 log4net debug="true" 출력과 펜더를 확인했습니다 작업을 수행합니다). 내 펜더 레이아웃 내 로그 출력은에 미친 자동으로 생성 된 정적 클래스가,

<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%-4thread] %-5level %class{1} - %message%newline"/> 
    </layout> 

입니다하지만. 나는 그것이 SocketFlusher을 말하고 싶은

2011-03-21 18:10:20,053 [5 ] DEBUG SocketFlusher+<>c__DisplayClass1 - 82 bytes available 

,이 포맷을 취득 할 수있는 권리 펜더 레이아웃은 무엇인가?

답변

8

클래스 이름을 appender 출력에 표시하려고합니다. 그리고 당신은

private static readonly ILog Log = LogManager.GetLogger(typeof($CLASSNAME$)); 

은 당신이 펜더 패턴 레이아웃에서하고 싶은 것은 %logger 이름 패턴 대신 %class 패턴을 포함하는 것입니다 ... 로거 클래스의 이름을 명명의 log4net 관용구를 다음과 같은 것입니다.

<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%-4thread] %-5level %logger{1} - %message%newline"/> 
</layout> 
관련 문제