1

AppenderSkeleton から継承してカスタム アペンダーを実装しました。ロガー インスタンスが正しく作成され、ログを記録するときに「Append」メソッドが呼び出されますが、メッセージの形式が正しくありません。StreamWriter インスタンスを渡していくつかの方法を試しましたが、すべての呼び出しでストリームへの書き込みに失敗しました。私が試したもう 1 つのことは、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>

何が間違っているかについてのアイデアはありますか?

メモリ ストリームからファイル ストリームへの変更は正しいレイアウトであるため、メモリ ストリームを使用することで何かを行う必要があります。

4

1 に答える 1

0

_writer をフラッシュする必要があったようです。それが完了すると、正しいストリーム位置が得られ、すべてのフォーマットが存在しました。

于 2014-10-28T17:26:38.000 に答える