[C#.NET] 追蹤類別 - TraceSource

  • 9147
  • 0
  • C#
  • 2013-07-05

[C#.Net] 追蹤類別 - TraceSource

上篇有提到使用Debug/Trace類別輸出追蹤結果,但這訊息有點稍嫌不足,我們這次將使用TraceSource類別來追蹤比較詳細的訊息。使用TraceSource類別需要有幾個步驟:

  1. 定義SourceSwitch類別
  2. 定義TraceSource類別
  3. 定義TraceListener類別

SourceSwitch 類別 - 這是用來決定輸出類型,SourceSwitch.Level = SourceLevels 列舉型別,設定要顯示的類型,這有點類似過濾的意思;若要過濾更多的訊息必須要使用TraceFilter類別。

TraceSource 類別  - 用來追蹤來源。以下方法是將資料寫入Listeners 集合,這就跟Trace/Debug類別的Wrtie方法一樣,只不過TraceSource可以包含更多的分類。

TraceListener 抽象類別 - 這是用來接聽追蹤類別的輸出訊息,繼承它的類別有以下:

TraceListener 抽象類別中的TraceOutputOptions 屬性是用來決定要輸出的格式內容,只要傳入TraceOptions 列舉型別就可以了

 

範例如下

private void Form1_Load(object sender, EventArgs e)
{
    TextWriterTraceListener listen = new TextWriterTraceListener("traceLog");
    listen.TraceOutputOptions = TraceOptions.ProcessId |
                                TraceOptions.ThreadId |
                                TraceOptions.Timestamp |
                                TraceOptions.DateTime |
                                TraceOptions.LogicalOperationStack |
                                TraceOptions.Callstack;

    Trace.Listeners.Add(listen);
    Trace.AutoFlush = true;
    Trace.WriteLine("Test");

    SourceSwitch sourceSwitch = new SourceSwitch("sourceSwitch");
    sourceSwitch.Level = SourceLevels.Verbose;

    TraceSource traceSource = new TraceSource("traceSource");
    traceSource.Switch = sourceSwitch;

    traceSource.Listeners.Add(listen);

    traceSource.TraceEvent(TraceEventType.Error, 1, "Error");
    traceSource.TraceEvent(TraceEventType.Information, 1, "Information");
}

觀察輸出結果

image

如此一來我們就完成了追蹤的功能。


同樣的上述的功能我們也可以透過組態檔完成,在App.config加入以下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="true"></trace>
    <sources>
      <source name="traceSource" switchName="sourceSwitch" switchType=" System.Diagnostics.SourceSwitch" >
        <listeners>
          <add name="myListener"></add>
        </listeners>
      </source>
    </sources>

    <switches>
      <add name="sourceSwitch" value="Verbose"></add>
    </switches>

    <sharedListeners>
      <add name="myListener"
           type="System.Diagnostics.TextWriterTraceListener"
           initializeData="d:\testLog.log"
           traceOutputOptions="DateTime,ProcessId,Timestamp,ThreadId"></add>
    </sharedListeners>

  </system.diagnostics>
</configuration>

 

接著在程式裡呼叫組態檔"traceSource",這樣也是可以完成追蹤。

private void Form1_Load(object sender, EventArgs e)
{
    TraceSource traceSource = new TraceSource("traceSource");
    traceSource.TraceEvent(TraceEventType.Error, 1, "Error");
    traceSource.TraceEvent(TraceEventType.Information, 1, "Information");
}
image

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo