使用log4net创建可以使用SvcTraceViewer.exe查看的日志文件

时间:2010-09-08 22:09:13

标签: log4net svctraceviewer

使用具有正确格式的log4net登录文件的最佳方法是什么(正确的XML,正确的时间戳格式,正确格式的自定义数据,正确的属性,基本上与XmlWriterTraceListener完全相同的方式)所以可以在Service Trace Viewer Tool (SvcTraceViewer.exe)

中查看

3 个答案:

答案 0 :(得分:2)

如果我想要这个,那么我会写我的自定义布局。我没有(还)查看细节,但我会编写一个派生自XmlLayoutBase的类。我需要更多时间来查看细节...

您也可以编写自己的appender但我认为在这种情况下编写布局类更有意义。

编辑:也许编写自己的appender是个好主意。在这种情况下,您可以使用System.ServiceModel.Diagnostics.DiagnosticTrace类。不确定,如果这是要走的路。我现在没有太多时间,但我会调查一下。

答案 1 :(得分:1)

不是答案,但我今天早些时候问question有关日志记录和WCF的事情,我想知道的其中一件事就是服务跟踪查看器。我见过的所有示例都描述了Service Trace Viewer使用的XML文件,这些文件是通过System.Diagnostics TraceSources和System.Diagnostics XmlFileListener生成的。无论如何,如果我在post中得到任何答案,你可能会觉得它们很有用。

答案 2 :(得分:0)

这是一个想法:

您可以编写自定义log4net Appender并让它(间接)向XmlWriterTraceListener写入消息。在Append方法中,您只需将消息发送到System.Diagnostics。

这是自定义Appender的一个example

在示例中,覆盖了Append。它传递一个LoggingEvent类/结构。出于您的目的(要将log4net输出路由到可由SvcTraceViewer读取的输出格式),您可以将输出写入System.Diagnostics(首先将其配置为登录到XmlWriterTraceListener)。您可以使用Trace.Write *方法,Trace.Trace *方法或TraceSources进行编写。

对于TraceSources,您可以将TraceSource名称视为与记录器名称相同(可在LoggingEvent类/结构中使用)。因此,您可以在app.config文件中为要进入xml文件的每个log4net记录器名称配置TraceSource。您的追加逻辑可能看起来像这样:

protected override void Append(LoggingEvent le)
{
  TraceSource ts = new TraceSource(le.LoggerName); // Not sure of logger name field in LoggingEvent
  ts.TraceEvent(LogLevelToTraceEventType(le.Level), 0, le.FormattedMessage);
}

这可能会给你你想要的东西。请注意,我实际上并没有这样做,所以我不能说这是不是一个好主意,但它看起来肯定会起作用。

很抱歉要简短,但我想在离开之前完成这项工作。