【问题标题】:log4net custom appender message format is ignoredlog4net 自定义 appender 消息格式被忽略
【发布时间】:2014-10-28 15:39:13
【问题描述】:

我通过从 AppenderSkeleton 继承实现了一个自定义附加程序。我的记录器实例已正确创建,并且在记录时调用了“附加”方法,但消息格式不正确。我通过传递 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>

关于什么是错的任何想法?

从内存流切换到文件流有正确的布局,所以它必须是使用内存流的东西。

【问题讨论】:

  • 您是否咨询过log4net 参考指南我很确定它提供了许多关于如何配置附加程序的示例
  • 你的问题是你正在写入一个内存流,然后它就不会被访问
  • 我已经更新了它,尝试从基本流中读取,但位置从未增加。

标签: c# .net log4net log4net-appender


【解决方案1】:

看来我需要刷新 _writer。完成后,我得到了正确的流位置,并且所有格式都存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多