我用 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);