2014-10-28 3 views
1

AppenderSeleton에서 상속하여 사용자 정의 appender를 구현했습니다. 내 로거 인스턴스가 제대로 작성되고 '추가'메소드가 호출되었지만 메시지의 형식이 올바르지 않습니다. StreamWriter 인스턴스를 전달하여 여러 가지 방법을 시도했지만 스트림에 대한 모든 호출이 스트림에 쓰지 않습니다. 내가 시도한 또 다른 것은 RenderedMessage 속성을 사용하지만 반환 된 값은 레이아웃 서식이없는 정확한 메시지입니다.log4net 사용자 정의 appender 메시지 형식이 무시됩니다.

protected override void Append(log4net.Core.LoggingEvent loggingEvent) 
{ 
    StreamWriter _writer = new StreamWriter(new MemoryStream()); 
    RenderLoggingEvent(_writer, loggingEvent); 
    //After writing the logging event the base stream position remains 0 
    byte[] messageBuffer = new byte[_writer.BaseStream.Position]; 
    _writer.BaseStream.Read(messageBuffer, 0, messageBuffer.Length); 

    //Also trying to read from a stream reader created from the base stream fails 
    var reader = new StreamReader(_writer.BaseStream); 
    var test = reader.ReadToEnd(); 

    //variable test is not formatted correctly according to the conversion pattern 
    test = loggingEvent.RenderedMessage; 
} 

<appender name="TestAppender" type="log4netTestApp"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="[%date]-[%thread]-[%level]-[%logger] - %message%newline" /> 
    </layout> 
</appender> 

무엇이 잘못 되었습니까?

메모리 스트림에서 파일 스트림으로 변경하는 것이 올바른 레이아웃이므로 메모리 스트림을 사용하여 무언가가 있어야합니다.

+0

당신은'log4net' 참조 가이드와상의 했습니까? 저는 appender를 설정하는 방법에 대한 많은 예제를 제공합니다. – MethodMan

+0

당신은 MemoryStream에 쓰고 있습니다. 그러면 액세스하지 못합니다. – stuartd

+0

나는 그것을 기본 스트림에서 읽기를 시도했지만 위치가 증가하지 않습니다. –

답변

0

필자는 _writer를 플러시해야했습니다. 일단 그것이 끝나면 정확한 스트림 위치를 얻었고 모든 포맷팅이있었습니다.

관련 문제