2010-09-08 99 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