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

使用log4net创建可以使用SvcTraceViewer.exe查看的日志文件,log4net,svctraceviewer,Log4net,Svctraceviewer,使用具有正确格式(正确的XML、正确的时间戳格式、正确格式的自定义数据、正确的属性,基本上与此完全相同)的log4net登录文件的最佳方式是什么?不是答案,但今天早些时候我问了一个关于日志和WCF的问题,我想知道的一件事是关于服务跟踪查看器。我看到的所有示例都描述了服务跟踪查看器通过System.Diagnostics TraceSources和System.Diagnostics XmlFileListener生成的XML文件。无论如何,如果我在我的网站上得到任何答案,你可能会发现它们很有用。

使用具有正确格式(正确的XML、正确的时间戳格式、正确格式的自定义数据、正确的属性,基本上与此完全相同)的log4net登录文件的最佳方式是什么?

不是答案,但今天早些时候我问了一个关于日志和WCF的问题,我想知道的一件事是关于服务跟踪查看器。我看到的所有示例都描述了服务跟踪查看器通过System.Diagnostics TraceSources和System.Diagnostics XmlFileListener生成的XML文件。无论如何,如果我在我的网站上得到任何答案,你可能会发现它们很有用。

如果我想这样做,我会写我的自定义布局。我(还)没有看细节,但我将编写一个从
XmlLayoutBase
派生的类。我需要更多的时间来了解细节

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

编辑:也许编写自己的附件是个好主意。在这种情况下,您可以使用
System.ServiceModel.Diagnostics.DiagnosticTrace
类。但目前还不确定这是否是一条路。我现在没有太多时间,但我将对此进行研究。

这里有一个想法:

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

这是一个定制的Appender

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

对于跟踪资源,可以考虑TraceSurCE名称与LogGER名称相同(在LoggEngEngvices类/结构中可用)。因此,您可以在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);
}
这可能会给你想要的。请注意,我实际上并没有这样做,所以我不能说这是一个好主意还是不好,但它肯定看起来会起作用


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

我想你指的是System.Diagnostics.XmlWriterTraceListener。你是对的。我在没有验证确切的侦听器名称的情况下输入了它。不管怎样,我仍然对如何从log4net、NLog、,etc与SvcTraceViewer.exe兼容。我认为在XmlWriterTraceListener的所有选项中完全模仿该格式需要相当长的时间。这也是我担心的问题,因此我提出了新建议。你指的是什么System.ServiceModel.Diagnostics.DiagnosticTrace类。在GAC中,我发现只有一个是程序集内部的,不能使用。编写自定义附加程序(仅用于格式化)有一个缺点:我不能使用所有其他附加程序(RollingFileAppender,FileAppender,…),或者我必须对所有附加程序进行子类化。FWIW,您可以在这里找到XmlWriterTraceListener的代码:我不确定它的最新版本(即NET1.1、2.0、3.0等),但它似乎展示了如何以SvcTraceViewer可以使用的格式布局xml。也许这可以用来开发XmlLayout。我对编写log4net布局不是很熟悉,所以我不能说这是否是一个好主意。自定义appender是不可能的,因为我不能使用相同的格式向其他appender写入。我想使用以下格式写入RollingFileAppender。