Я внедрил пользовательский appender, наследуя от AppenderSkeleton. Экземпляр моего регистратора создается правильно, и при регистрации метода «Добавить» вызывается, но сообщение не отформатировано правильно. Я попробовал несколько разных способов, передав экземпляр 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
Я обновил его с помощью попытка чтения из базового потока, но позиция никогда не увеличивается. –