2010-09-08 69 views

回答

1

没有答案,但我今天早些时候问过一个question关于日志记录和WCF,我想知道的一件事是关于Service Trace Viewer。我所见过的所有示例都描述了通过System.Diagnostics TraceSources和System.Diagnostics XmlFileListener生成的Service Trace Viewer消耗的XML文件。无论如何,如果我在我的post中得到任何答案,您可能会发现它们很有用。

+0

我想你的意思是System.Diagnostics.XmlWriterTraceListener。 – bitbonk 2010-09-15 14:13:26

+1

你是对的。我在没有验证确切的监听器名称的情况下键入了它。无论如何,我仍然对如何从log4net,NLog等获得与SvcTraceViewer.exe兼容的输出(如果可能的话)感兴趣。 – wageoghe 2010-09-15 16:42:32

2

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

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

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

+0

我认为用XmlWriterTraceListener的所有选项完全模仿格式会花费相当多的时间。 – bitbonk 2010-09-15 14:18:15

+0

这就是我所害怕的,因此也是我的新建议。 – 2010-09-15 14:19:52

+0

你的意思是什么System.ServiceModel.Diagnostics.DiagnosticTrace类。在GAC中,我只发现一个内部装配,不能使用。 – bitbonk 2010-09-15 16:04:56

0

这里有一个想法:

你可以写一个自定义log4net的追加程序,并把它写消息(间接)的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); 
} 

这可能会给你你想要的。请注意,我并没有真正做到这一点,所以我不能说这是不是一个好主意,但它看起来好像会起作用。

对不起,我只是想在离开之前完成这个工作。

+0

编写一个自定义appender(仅用于格式化)有一个缺点:我不能使用所有其他Appender(RollingFileAppender,FileAppender,...),或者我必须继承所有这些appender。 – bitbonk 2010-09-16 05:42:13

+0

FWIW,你可以在这里找到XmlWriterTraceListener的代码:http://www.koders.com/csharp/fid7ECC273D0A665AFFDB9276AC64289085CD1E2A8E.aspx?s=DateTime我不知道它是如何当前它(即.NET 1.1,2.0,3.0等等),但它似乎展示了如何以可由SvcTraceViewer使用的格式布置xml。也许这可以用来开发一个XmlLayout。我对编写log4net布局并不是很熟悉,所以我不能说这是否是个好主意。 – wageoghe 2010-09-21 19:42:03

+0

自定义appender恕我直言,不可能,因为我无法使用该格式写入其他appender。我想用这种格式写入RollingFileAppender。 – bitbonk 2010-09-22 07:13:55