2011-01-31 74 views
8

我想了解Trace.WriteTrace.TraceInformation之間的區別以及應該使用哪一個。如何在跟蹤中包含用戶友好的時間戳

我試圖配置traceOutputOptions的時間戳/日期時間。我只需要爲我寫的每條消息添加一個時間戳。我得到的日期時間有點麻煩,因爲它會在下一行添加應用程序名稱和用戶友好時間戳。

ConsoleApplication1.exe Information: 0 : Hello - Trace! 
DateTime=2011-01-31T14:26:11.1538509Z 
ConsoleApplication1.exe Error: 0 : Hello - Trace! 
DateTime=2011-01-31T14:26:11.1538509Z 

所有我需要的是一樣的東西

2011-01-31 11:32 Information: Hello - Trace! 
2011-01-31 11:33 Error: Hello - Trace! 

是否有App.config設置它做的任何簡單的方法?

+0

`Trace.Write`及其之類是追蹤(使用OutputDebugString)的「舊方法」。 「新的方式」是跟蹤來源:http://msdn.microsoft.com/en-us/library/ms228989.aspx – Tergiver 2011-01-31 16:16:35

回答

1

查看codeplex上的Ukadc.Diagnostics項目。它提供了一個很好的基於System.Diagnostics的插件包,它提供了比使用內置的System.Diagnostics TraceListeners所能實現的更強大的輸出格式化功能(類似於log4net和NLog)。您甚至可以編寫自己的格式/標記對象,並將它們包括在輸出格式化過程中。

這個庫很容易使用,效果很好。

+0

感謝您的鏈接。包含一個簡單的外部依賴關係似乎有點「沉重」。我希望能夠找到一些能夠實現這一目標的東西。無論如何,將在codeplex上看看這個項目。 – imak 2011-02-01 21:52:20

+0

@imak - 內置的TraceListeners沒有非常靈活的格式選項。你的另一個選擇是編寫你自己的TraceListener,然後實現格式化,然而你會喜歡它。 – wageoghe 2011-02-01 22:02:36

10

我已經找到一個更好的方法,而無需任何其他外部依賴(我認爲包括System.Diagnostics程序功能已經豐富)

我繼承了我所需要的兩個監聽器(ConsoleTraceListener而TextWriterTraceListener會)以這樣的方式

namespace MyApp 
{ 
    namespace Diagnostics 
    { 
     public class DateTimeConsoleTraceListener : ConsoleTraceListener 
     { 
      public override void Write(string message) 
      { 
       base.Write(DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss.fffffff ") + message); 
      } 
     } 

     public class DateTimeTextWriterTraceListener : TextWriterTraceListener 
     { 
      public DateTimeTextWriterTraceListener(string fileName) : base(fileName) { } 

      public override void Write(string message) 
      { 
       base.Write(DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss.fffffff ") + message); 
      } 
     } 
    } 
} 

然後,在App.config中:

<sharedListeners> 
    <add name="ConsoleListener" 
    type="MyApp.Diagnostics.DateTimeConsoleTraceListener, MyApp"> 
    <filter type="System.Diagnostics.EventTypeFilter" 
     initializeData="All"/> 
    </add> 
    <add name="FileListener" 
    type="MyApp.Diagnostics.DateTimeTextWriterTraceListener, MyApp" 
    initializeData="MyApp.log" > 
    <filter type="System.Diagnostics.EventTypeFilter" 
     initializeData="All"/> 
    </add> 
</sharedListeners> 

希望這有助於!