我通过继承AppenderSkeleton实现了自定义appender。我的记录器实例已正确创建,并在记录'追加'调用方法但消息格式不正确。我通过传递StreamWriter实例尝试了几种不同的方法,但是对它的所有调用都无法写入流。我尝试过的另一件事是使用RenderedMessage属性,但返回的值是没有布局格式的确切消息。
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 :(得分:0)
看来我需要冲洗_writer。一旦完成,我得到了正确的流位置,并且所有格式都存在。