什麼是使用log4net登錄文件的最佳方式,該格式具有正確的格式(正確的XML,正確的時間戳格式,正確格式的自定義數據,正確的屬性,基本上與XmlWriterTraceListener完全一樣),所以可以在Service Trace Viewer Tool (SvcTraceViewer.exe)查看?使用log4net創建可用SvcTraceViewer.exe查看的日誌文件
回答
如果我想這樣,那麼我會寫我的自定義佈局。我沒有(看)的細節,但我會寫一個派生自XmlLayoutBase
的課程。我需要更多的時間來看看細節...
你也可以編寫自己的appender,但我認爲在這種情況下,編寫佈局類更有意義。
編輯:也許寫你自己的appender是一個好主意。在這種情況下,您可以使用System.ServiceModel.Diagnostics.DiagnosticTrace
類。不確定,但如果這是要走的路。我現在沒有太多時間,但我會研究這一點。
這裏有一個想法:
你可以寫一個自定義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);
}
這可能會給你你想要的。請注意,我並沒有真正做到這一點,所以我不能說這是不是一個好主意,但它看起來好像會起作用。
對不起,我只是想在離開之前完成這個工作。
編寫一個自定義appender(僅用於格式化)有一個缺點:我不能使用所有其他Appender(RollingFileAppender,FileAppender,...),或者我必須繼承所有這些appender。 – bitbonk 2010-09-16 05:42:13
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
自定義appender恕我直言,不可能,因爲我無法使用該格式寫入其他appender。我想用這種格式寫入RollingFileAppender。 – bitbonk 2010-09-22 07:13:55
- 1. 使用Log4Net創建ReadOnly日誌文件
- 2. Log4net不爲NHibernate創建日誌文件
- 3. log4net日誌文件沒有創建
- 4. 未創建Log4net日誌文件?
- 5. log4net動態創建日誌文件
- 6. log4net - 只創建一個日誌文件
- 7. 使用Log4net的事件查看器中的日誌信息
- 8. log4net日誌記錄沒有創建日誌文件
- 9. 使用htaccess創建日誌文件
- 10. Log4Net C# - 按日期創建日誌文件夾
- 11. log4net不會爲引用的項目文件創建日誌文件
- 12. 查看Unix日誌文件
- 13. Umbraco查看日誌文件
- 14. 未使用Log4Net創建的文件
- 15. 可能使用提升的權限創建的日誌文件
- 16. 用戶創建的日誌文件
- 17. 創建並查看Flash日誌
- 18. 使用文件觀察刷新使用PyQt4日誌查看器
- 19. log4net日誌被創建,但仍爲空
- 20. 使用log4net和azure文件appender設置日誌文件限制
- 21. Linux查看日誌文件,每次重新創建
- 22. log4net將不會在Windows 7上創建日誌文件
- 23. 爲什麼Log4Net不能在生產中創建日誌文件?
- 24. log4net將在哪裏創建此日誌文件?
- 25. log4net在安裝時沒有創建日誌文件
- 26. log4net沒有創建日誌文件來記錄
- 27. log4net不在Windows Server 2003上創建日誌文件
- 28. log4net日誌文件未在C#中創建
- 29. 從Log4Net創建zip日誌文件導致System.IO.IOException
- 30. 是否可以使用JCL創建多個日誌文件?
我想你的意思是System.Diagnostics.XmlWriterTraceListener。 – bitbonk 2010-09-15 14:13:26
你是對的。我在沒有驗證確切的監聽器名稱的情況下鍵入了它。無論如何,我仍然對如何從log4net,NLog等獲得與SvcTraceViewer.exe兼容的輸出(如果可能的話)感興趣。 – wageoghe 2010-09-15 16:42:32