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>
무엇이 잘못 되었습니까?
메모리 스트림에서 파일 스트림으로 변경하는 것이 올바른 레이아웃이므로 메모리 스트림을 사용하여 무언가가 있어야합니다.
당신은'log4net' 참조 가이드와상의 했습니까? 저는 appender를 설정하는 방법에 대한 많은 예제를 제공합니다. – MethodMan
당신은 MemoryStream에 쓰고 있습니다. 그러면 액세스하지 못합니다. – stuartd
나는 그것을 기본 스트림에서 읽기를 시도했지만 위치가 증가하지 않습니다. –