gpt4 book ai didi

c# - log4net AppenderSkeleton 忽略 PatternLayout

转载 作者:太空狗 更新时间:2023-10-30 01:18:00 25 4
gpt4 key购买 nike

我用 log4net 创建了自己的 Appender,

 public class TextBoxAppender : AppenderSkeleton
{
...(constructor and other stuff omitted)...

protected override void Append(log4net.Core.LoggingEvent loggingEvent)
{
var msg = string.Concat(loggingEvent.RenderedMessage, "\r\n");

_textBox.AppendText(s);

}

}

我的 App.config 有一个我想使用的 PatternLayout,

 <appender name="TextBoxAppender" type="log4netAppender.TextBoxAppender">
<root>
<level value="DEBUG">
<appender-ref ref="TextBoxAppender">
</appender-ref>
</level>
</root>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{dd MMM yyyy HH:mm:ss} %level - %message%newline%exception%newline" />
</layout>
</appender>

loggingEvent.RenderedMessage 没有给我使用 PatternLayout 格式化的字符串。

我看到 AppendSkeleton 有这个签名

public virtual ILayout Layout { get; set; }

但我不想编写自己的布局,我想使用其他 Appender 使用的“标准”布局...

有人知道吗?非常感谢

提示:也许通过这种方式我们可以访问其他现有记录器的渲染器?

var hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.RendererMap .....

解决方案

在 Append() 中,就在 RenderLoggingEvent 之前,设置 Layout,否则为 null。

this.Layout = new log4net.Layout.PatternLayout("%date{dd MMM yyyy HH:mm:ss} %level - %message");
string msg = base.RenderLoggingEvent(loggingEvent);

最佳答案

调用基本方法 RenderLoggingEvent 以根据您的游览布局编写您的事件。例如这里是 TraceAppender

中的 Append 方法
// log4net.Appender.TraceAppender
protected override void Append(LoggingEvent loggingEvent)
{
Trace.Write(base.RenderLoggingEvent(loggingEvent), this.m_category.Format(loggingEvent));
if (this.m_immediateFlush)
{
Trace.Flush();
}
}

所以在你的情况下:

public class TextBoxAppender : AppenderSkeleton
{
...(constructor and other stuff omitted)...
protected override void Append(log4net.Core.LoggingEvent loggingEvent)
{
// format your message in the layout, not here
// var msg = string.Concat(loggingEvent.RenderedMessage, "\r\n");
_textBox.AppendText(base.RenderLoggingEvent(loggingEvent));
}
}

关于c# - log4net AppenderSkeleton 忽略 PatternLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29209289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com