- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我用 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
// 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/
我正在尝试将一个扩展org.apache.log4j.AppenderSkeleton的类从旧版本的log4j迁移到log4j 2。我正在阅读该类的JavaDoc,我读到了, Appenders co
我最近在我的项目中链接了 log4cpp,并尝试创建一个这样的类: class ConsoleAppenderSkeleton : public log4cpp::AppenderSkeleton {
我用 log4net 创建了自己的 Appender, public class TextBoxAppender : AppenderSkeleton { ...(constructor
我创建连接到 Web 服务的自定义 Appender(使用 AppenderSkeleton)...在这个 Appender 中,我需要将一些自定义属性(如 Url、Browser、User 等)发送
我有一个带有 JTextPane 的 swing gui,用于从底层应用程序输出日志。我的问题是,在初始化 gui 并记录第一个日志条目后,滚动条将“禁用”,直到我触发操作。下一个日志条目后,水平滚动
我是一名优秀的程序员,十分优秀!