EventSchemaTraceListener 類別

定義

將端對端事件的追蹤或偵錯輸出導向至 XML 編碼、符合結構描述的記錄檔。

public ref class EventSchemaTraceListener : System::Diagnostics::TextWriterTraceListener
public class EventSchemaTraceListener : System.Diagnostics.TextWriterTraceListener
type EventSchemaTraceListener = class
    inherit TextWriterTraceListener
Public Class EventSchemaTraceListener
Inherits TextWriterTraceListener
繼承

範例

下列程式代碼範例示範如何使用 EventSchemaTraceListener 類別。


///////////////////////////////////////////////////////////////////////
//
// EventSchemaTraceListener.cpp : main project file.
// Expected Output:
// 1)
//      EventSchemaTraceListener CPP Sample
//
//      IsThreadSafe? True
//      BufferSize =  65536
//      MaximumFileSize =  20480000
//      MaximumNumberOfFiles =  2
//      Name =  eventListener
//      TraceLogRetentionOption = LimitedCircularFiles
//      TraceOutputOptions = DateTime, Timestamp, ProcessId
//
//      Press the enter key to exit
//
// 2) An output file is created named TraceOutput.xml.  It will be
//    opened and displayed in Microsoft Notepad.
//
// NOTE 1:
//  Under certain circumstances, the VS C++ compiler will treat
//          Console::WriteLine("MyText = " + MyVar);
//        differently then the VS CSharp compiler.
//        The C++ compiler will produce error C3063, whereas the 
//        CSharp compiler accepts the statement.
//        This occurs when the VS C++ compiler cannot determine the
//        datatype of "MyVar" because it is an enumeration type.
//        The solution is:
//        Use either of the following two methods:
//          Console::WriteLine("MyText = {0} " , MyVar);
//          Console::WriteLine("MyText =  " + MyVar.ToString());
//
//        Although not specific to this particular pieces of code,
//        this is demonstrated below in the Display function:  The
//        last two members, TraceLogRetentionOption, and
//        TraceOutputOptions, are enumerations, and cannot simply be
//        concatenated into Console::WriteLine.
//
///////////////////////////////////////////////////////////////////////
#using <System.dll>
#using <System.Core.dll>

#define NOCONFIGFILE 1
using namespace System;
using namespace System::IO;
using namespace System::Diagnostics;


[STAThreadAttribute]
void main()
{
    Console::WriteLine("EventSchemaTraceListener CPP Sample\n");

    File::Delete("TraceOutput.xml");
    TraceSource ^ ts = gcnew TraceSource("TestSource");


#if NOCONFIGFILE
    ts->Listeners->Add(gcnew EventSchemaTraceListener("TraceOutput.xml",
                            "eventListener", 65536,
                            TraceLogRetentionOption::LimitedCircularFiles,
                            20480000, 2));
    ts->Listeners["eventListener"]->TraceOutputOptions =
                                    TraceOptions::DateTime |
                                    TraceOptions::ProcessId |
                                    TraceOptions::Timestamp;
#endif

    EventSchemaTraceListener ^ ESTL =
               (EventSchemaTraceListener^)(ts->Listeners["eventListener"]);


    Console::WriteLine("IsThreadSafe?            = " + ESTL->IsThreadSafe);
    Console::WriteLine("BufferSize               = " + ESTL->BufferSize);
    Console::WriteLine("MaximumFileSize          = " + ESTL->MaximumFileSize);
    Console::WriteLine("MaximumNumberOfFiles     = " + ESTL->MaximumNumberOfFiles);
    Console::WriteLine("Name                     = " + ESTL->Name);
    Console::WriteLine("TraceLogRetentionOption  = " + ESTL->TraceLogRetentionOption.ToString());
    Console::WriteLine("TraceOutputOptions       = {0}\n", ESTL->TraceOutputOptions);

    ts->Switch->Level = SourceLevels::All;
    String ^ testString = "<Test><InnerElement Val=\"1\" />"
                        + "<InnerElement Val=\"Data\"/>"
                        + "<AnotherElement>11</AnotherElement></Test>";

    UnescapedXmlDiagnosticData ^ unXData = gcnew UnescapedXmlDiagnosticData(testString);
    ts->TraceData(TraceEventType::Error, 38, unXData);
    ts->TraceEvent(TraceEventType::Error, 38, testString);
    ts->Flush();
    ts->Close();

    Process::Start("notepad.exe", "TraceOutput.xml");
    Console::WriteLine("\nPress the enter key to exit");
    Console::ReadLine();
}
#define NOCONFIGFILE
using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
using System.Diagnostics;

class testClass
{
    [STAThreadAttribute]
    static void Main()
    {
        File.Delete("TraceOutput.xml");
        TraceSource ts = new TraceSource("TestSource");
#if NOCONFIGFILE
        //ts.Listeners.Add(new EventSchemaTraceListener("TraceOutput.xml", "eventListener", 65536, TraceLogRetentionOption.LimitedCircularFiles, 20480000, 2));
        ts.Listeners.Add(new EventSchemaTraceListener("TraceOutput.xml", "eventListener"));
        ts.Listeners["eventListener"].TraceOutputOptions = TraceOptions.DateTime | TraceOptions.ProcessId | TraceOptions.Timestamp;
#endif
        ts.Switch.Level = SourceLevels.All;
        string testString = "<Test><InnerElement Val=\"1\" /><InnerElement Val=\"Data\"/><AnotherElement>11</AnotherElement></Test>";
        UnescapedXmlDiagnosticData unXData = new UnescapedXmlDiagnosticData(testString);
        ts.TraceData(TraceEventType.Error, 38, unXData);
        ts.TraceEvent(TraceEventType.Error, 38, testString);
        Trace.Listeners.Add(new EventSchemaTraceListener("TraceOutput.xml"));
        Trace.Write("test", "test");
        Trace.Flush();
        ts.Flush();
        ts.Close();
        DisplayProperties(ts);
        Process.Start("notepad.exe", "TraceOutput.xml");
        Console.WriteLine("Press the enter key to exit");
        Console.ReadLine();
    }
    private static void DisplayProperties(TraceSource ts)
    {
        Console.WriteLine("IsThreadSafe? " + ((EventSchemaTraceListener)ts.Listeners["eventListener"]).IsThreadSafe);
        Console.WriteLine("BufferSize =  " + ((EventSchemaTraceListener)ts.Listeners["eventListener"]).BufferSize);
        Console.WriteLine("MaximumFileSize =  " + ((EventSchemaTraceListener)ts.Listeners["eventListener"]).MaximumFileSize);
        Console.WriteLine("MaximumNumberOfFiles =  " + ((EventSchemaTraceListener)ts.Listeners["eventListener"]).MaximumNumberOfFiles);
        Console.WriteLine("Name =  " + ((EventSchemaTraceListener)ts.Listeners["eventListener"]).Name);
        Console.WriteLine("TraceLogRetentionOption =  " + ((EventSchemaTraceListener)ts.Listeners["eventListener"]).TraceLogRetentionOption);
        Console.WriteLine("TraceOutputOptions =  " + ((EventSchemaTraceListener)ts.Listeners["eventListener"]).TraceOutputOptions);
    }
}
#Const NOCONFIGFILE = True
Imports System.IO
Imports System.Xml
Imports System.Xml.XPath
Imports System.Diagnostics

Class testClass

    <STAThreadAttribute()> _
    Shared Sub Main()
        File.Delete("TraceOutput.xml")
        Dim ts As New TraceSource("TestSource")
#If NOCONFIGFILE Then
        ts.Listeners.Add(New EventSchemaTraceListener("TraceOutput.xml", "eventListener", 65536, TraceLogRetentionOption.LimitedCircularFiles, 20480000, 2))
        ts.Listeners("eventListener").TraceOutputOptions = TraceOptions.DateTime Or TraceOptions.ProcessId Or TraceOptions.Timestamp
#End If
        ts.Switch.Level = SourceLevels.All
        Dim testString As String = "<Test><InnerElement Val=""1"" /><InnerElement Val=""Data""/><AnotherElement>11</AnotherElement></Test>"
        Dim unXData As New UnescapedXmlDiagnosticData(testString)
        ts.TraceData(TraceEventType.Error, 38, unXData)
        ts.TraceEvent(TraceEventType.Error, 38, testString)
        ts.Flush()
        ts.Close()
        DisplayProperties(ts)
        Process.Start("notepad.exe", "TraceOutput.xml")
        Console.WriteLine("Press the enter key to exit")
        Console.ReadLine()

    End Sub

    Private Shared Sub DisplayProperties(ByVal ts As TraceSource)
        Console.WriteLine("IsThreadSafe? " + CType(ts.Listeners("eventListener"), EventSchemaTraceListener).IsThreadSafe.ToString())
        Console.WriteLine("BufferSize =  " + CType(ts.Listeners("eventListener"), EventSchemaTraceListener).BufferSize.ToString())
        Console.WriteLine("MaximumFileSize =  " + CType(ts.Listeners("eventListener"), EventSchemaTraceListener).MaximumFileSize.ToString())
        Console.WriteLine("MaximumNumberOfFiles =  " + CType(ts.Listeners("eventListener"), EventSchemaTraceListener).MaximumNumberOfFiles.ToString())
        Console.WriteLine("Name =  " + CType(ts.Listeners("eventListener"), EventSchemaTraceListener).Name)
        Console.WriteLine("TraceLogRetentionOption =  " + CType(ts.Listeners("eventListener"), EventSchemaTraceListener).TraceLogRetentionOption.ToString())
        Console.WriteLine("TraceOutputOptions =  " + CType(ts.Listeners("eventListener"), EventSchemaTraceListener).TraceOutputOptions.ToString())
    End Sub
End Class

備註

類別 EventSchemaTraceListener 提供端對端架構相容事件的追蹤。 您可以針對具有跨線程、、 AppDomain進程和計算機界限異質元件的系統使用端對端追蹤。 標準化事件架構可跨這些界限進行追蹤。 架構會啟用新增自定義且符合架構規範的專案。 您可以使用 服務追蹤查看器工具 (SvcTraceViewer.exe) 來顯示事件數據。

EventSchemaTraceListener 已針對無鎖定追蹤的隱含支援來調整記錄效能。

類別 EventSchemaTraceListener 會將追蹤和偵錯資訊轉換成 XML 編碼的文字數據流。 本節稍後的數據表會顯示 XML 輸出的描述。

您可以在程式代碼中建立 EventSchemaTraceListener 物件。 或者,對於 .NET Framework 應用程式,您可以透過應用程式組態檔啟用或停用EventSchemaTraceListener對象,然後在應用程式中使用已設定EventSchemaTraceListener的物件。 如需在 .NET Framework 應用程式中追蹤和偵錯組態檔的詳細資訊,請參閱追蹤和偵錯設定架構

EventSchemaTraceListener若要在 .NET Framework 應用程式中設定 物件,請修改對應至應用程式名稱的組態檔。 在此檔案中,您可以新增、移除或設定接聽程序的屬性。 組態檔的格式應如下:

<configuration>  
    <system.diagnostics>  
        <sources>  
            <source name="TestSource" >  
                <listeners>  
                    <!--Remove the default trace listener for better performance.-->  
                    <remove name="Default"/>  
                    <!--Note: Removing the default trace listener prevents the dialog box   
                    from being displayed for Debug.Fail or Debug.Assert commands that are   
                    executed in user mode.-->  
                    <add name="eventListener"   
                      type="System.Diagnostics.EventSchemaTraceListener,  system.core"  
                      initializeData="TraceOutput.xml"   
                      traceOutputOptions="ProcessId, DateTime, Timestamp"   
                      bufferSize="65536"  
                      maximumFileSize="20480000"  
                      logRetentionOption="LimitedCircularFiles"  
                      maximumNumberOfFiles="2"/>  
                </listeners>  
            </source>  
        </sources>  
    </system.diagnostics>  

類別 EventSchemaTraceListenerFilter 繼承基類 TraceListener的屬性。 屬性 Filter 允許接聽程式的其他追蹤輸出篩選層級。 如果篩選存在, Trace 追蹤接聽程式的方法會呼叫 ShouldTrace 篩選的 方法,以判斷是否要發出追蹤。

如果嘗試寫入正在使用或無法使用的檔案,則 GUID 後綴會自動新增至檔名。

注意

接聽程式方法旨在由、Trace類別 TraceSource 的方法Debug呼叫。 請勿直接從應用程式程式代碼呼叫接聽程式方法。 接 EventSchemaTraceListener 聽程式主要是供類別使用 TraceSource

下表描述 XML 輸出的元素和屬性。

項目 屬性 輸出 注意
CallStack None 取決於屬性中的TraceOutputOptions旗標是否存在Callstack 或 之類的><特殊字元會取代為逸出序列。 請參閱下一個表格中的逸出字元轉譯數據表。
Computer None 一律顯示。 這個專案代表 屬性的值 MachineName
Correlation ActivityID 一律顯示。 如果未 ActivityID 指定 ,則預設值為空的 GUID。
RelatedActivityID 取決於方法呼叫中的Trace參數是否存在relatedActivityId 屬性 RelatedActivityID 會對應至 relatedActivityId 方法的參數 TraceTransfer
Data None 一律顯示。 這個專案代表參數輸入 (data) 。 每個數據物件都會提供一個專案。 在事件記錄檔的情況下,元素 Data 會包含逸出的 XML 數據。 如果是數據記錄,元素 Data 會包含未逸出的數據。 數據記錄輸出會使用 ToString 傳入資料物件的方法。
Event None 一律顯示。 這個專案包含追蹤事件。
EventData None 針對事件記錄檔顯示。 這個專案代表 (message的參數 args 輸入,) 。 Data其中包含透過呼叫 方法所建立的逸出 XML 資料的專案TraceEvent
EventID None 一律顯示。 這個專案代表參數輸入 (id) 。
Execution ProcessID 取決於屬性中的TraceOutputOptions旗標是否存在ProcessId 屬性 ProcessID 是在 中 TraceEventCache指定。
ThreadID 存在時 ProcessID 存在。 屬性 ThreadID 是在 中 TraceEventCache指定。
Level None 一律顯示。 這個專案代表參數輸入, () 的 eventType 數值。 大於 255 的參數值會輸出為層級 8,代表 TraceEventType.Information。 追蹤事件類型 CriticalErrorWarningInformationVerbose 分別輸出為層級 1、2、4、8 和 10。
LogicalOperationStack None 取決於屬性中的TraceOutputOptions旗標是否存在LogicalOperationStack 只有一個邏輯作業可以存在。 因此,值會寫入為 LogicalOperation 專案底下的 LogicalOperationStack 節點。
OpCode None 當大於 255 時 Level 存在。 這個專案代表數值大於 255 的 Trace 事件類型。 StartStopSuspendResumeTransfer 分別輸出為層級 1、2、4、8 和 10。
Provider GUID 一律顯示。 一律為空白。
RenderingInfo Culture 一律顯示。 這個屬性代表事件類型的資源字串。 它一律為 “en-EN\”。
System Name 一律顯示。
TimeCreated SystemTime 取決於屬性中的TraceOutputOptions旗標是否存在DateTime 時間是 屬性的值 TraceEventCache.DateTime 。 此屬性以國際標準時間表示
TimeStamp None 取決於屬性中的TraceOutputOptions旗標是否存在Timestamp 這個元素是在 中 TraceEventCache指定。
UserData None 數據記錄的呈現。 這個專案包含 Data 具有方法中未逸出、使用者提供之數據的 TraceData 元素。

下表顯示 XML 輸出中逸出的字元。 逸出發生在所有元素和屬性中,但包含使用者提供、未逸出數據的專案除外 UserData 。 專案 UserData 是呼叫 TraceData 方法的結果。

逸出的字元
& &
< <
> >
" "
|'
0xD
0xA

建構函式

EventSchemaTraceListener(String)

使用指定的檔案做為偵錯和追蹤輸出的接收者,來初始化 EventSchemaTraceListener 類別的新執行個體。

EventSchemaTraceListener(String, String)

使用指定的檔案做為偵錯和追蹤輸出的接收者,以指定的名稱初始化 EventSchemaTraceListener 類別的新執行個體。

EventSchemaTraceListener(String, String, Int32)

使用指定的檔案做為偵錯和追蹤輸出的接收者,以指定的名稱和指定的緩衝區大小初始化 EventSchemaTraceListener 類別的新執行個體。

EventSchemaTraceListener(String, String, Int32, TraceLogRetentionOption)

使用具有指定的記錄保留原則的指定檔案做為偵錯和追蹤輸出的接收者,以指定的名稱和指定的緩衝區大小初始化 EventSchemaTraceListener 類別的新執行個體。

EventSchemaTraceListener(String, String, Int32, TraceLogRetentionOption, Int64)

使用具有指定的記錄保留原則和最大大小的指定檔案做為偵錯和追蹤輸出的接收者,以指定的名稱和指定的緩衝區大小初始化 EventSchemaTraceListener 類別的新執行個體。

EventSchemaTraceListener(String, String, Int32, TraceLogRetentionOption, Int64, Int32)

使用具有指定的記錄保留原則、最大大小和檔案計數的指定檔案做為偵錯和追蹤輸出的接收者,以指定的名稱和指定的緩衝區大小初始化 EventSchemaTraceListener 類別的新執行個體。

屬性

Attributes

取得在應用程式組態檔中定義的自訂追蹤接聽程式屬性。

(繼承來源 TraceListener)
BufferSize

取得輸出緩衝區的大小。

Filter

取得或設定追蹤接聽程式的追蹤篩選。

(繼承來源 TraceListener)
IndentLevel

取得或設定縮排層級。

(繼承來源 TraceListener)
IndentSize

取得或設定縮排的空格數目。

(繼承來源 TraceListener)
IsThreadSafe

取得值,指出追蹤接聽程式是否為安全執行緒。

MaximumFileSize

取得記錄檔的最大大小。

MaximumNumberOfFiles

取得記錄檔的最大數目。

Name

取得或設定這個 TraceListener 的名稱。

(繼承來源 TraceListener)
NeedIndent

取得或設定值,指出是否要縮排輸出。

(繼承來源 TraceListener)
TraceLogRetentionOption

取得檔案的追蹤記錄保留選項。

TraceOutputOptions

取得或設定追蹤輸出選項。

(繼承來源 TraceListener)
Writer

取得或設定會寫入記錄檔的基礎文字寫入器。

方法

Close()

關閉這個接聽程式的記錄檔,使其不再接收追蹤或偵錯輸出。

CreateObjRef(Type)

建立包含所有相關資訊的物件,這些資訊是產生用來與遠端物件通訊的所需 Proxy。

(繼承來源 MarshalByRefObject)
Dispose()

釋放 TraceListener 所使用的所有資源。

(繼承來源 TraceListener)
Dispose(Boolean)

處置這個 TextWriterTraceListener 物件。

(繼承來源 TextWriterTraceListener)
Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
Fail(String)

當您實作 TraceListener 類別時,發出錯誤訊息給您建立的接聽程式。

(繼承來源 TraceListener)
Fail(String, String)

將包括基本的錯誤訊息和詳細的錯誤訊息等錯誤資訊寫入至記錄檔。

Flush()

造成緩衝資料寫入這個接聽程式的記錄檔。

GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetLifetimeService()
已淘汰.

擷取控制這個執行個體存留期 (Lifetime) 原則的目前存留期服務物件。

(繼承來源 MarshalByRefObject)
GetSupportedAttributes()

取得追蹤接聽程式所支援的自訂 XML 組態屬性。

GetType()

取得目前執行個體的 Type

(繼承來源 Object)
InitializeLifetimeService()
已淘汰.

取得存留期服務物件,以控制這個執行個體的存留期原則。

(繼承來源 MarshalByRefObject)
MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
MemberwiseClone(Boolean)

建立目前 MarshalByRefObject 物件的淺層複本。

(繼承來源 MarshalByRefObject)
ToString()

傳回代表目前物件的字串。

(繼承來源 Object)
TraceData(TraceEventCache, String, TraceEventType, Int32, Object)

將追蹤資訊、單一資料物件和事件資訊寫入至記錄檔。

TraceData(TraceEventCache, String, TraceEventType, Int32, Object[])

將追蹤資訊、多個資料物件和事件資訊寫入至記錄檔。

TraceEvent(TraceEventCache, String, TraceEventType, Int32)

寫入追蹤和事件資訊至特定接聽程式的輸出。

(繼承來源 TraceListener)
TraceEvent(TraceEventCache, String, TraceEventType, Int32, String)

將追蹤資訊、訊息和事件資訊寫入至記錄檔。

TraceEvent(TraceEventCache, String, TraceEventType, Int32, String, Object[])

將追蹤資訊、格式化訊息和事件資訊寫入至記錄檔。

TraceTransfer(TraceEventCache, String, Int32, String, Guid)

將追蹤資訊 (包括相關活動識別)、訊息和事件資訊寫入至記錄檔。

Write(Object)

將物件的 ToString() 方法的值寫入當您實作 TraceListener 類別時所建立的接聽程式。

(繼承來源 TraceListener)
Write(Object, String)

將類別名稱和物件的 ToString() 方法的值寫入當您實作 TraceListener 類別時所建立的接聽程式。

(繼承來源 TraceListener)
Write(String)

將訊息寫入至記錄檔,不提供任何其他內容資訊。

Write(String, String)

將分類名稱和訊息寫入當您實作 TraceListener 類別時所建立的接聽程式。

(繼承來源 TraceListener)
WriteIndent()

將縮排寫入當您實作這個類別時所建立的接聽程式,並且將 NeedIndent 屬性重設為 false

(繼承來源 TraceListener)
WriteLine(Object)

將物件的 ToString() 方法的值寫入當您實作 TraceListener 類別時所建立的接聽程式,後面跟隨著行結束字元。

(繼承來源 TraceListener)
WriteLine(Object, String)

將分類名稱和物件的 ToString() 方法的值寫入當您實作 TraceListener 類別時所建立的接聽程式,後面跟隨著行結束字元。

(繼承來源 TraceListener)
WriteLine(String)

將後面跟著現有行結束字元的訊息寫入至記錄檔,不提供任何其他內容資訊。

WriteLine(String, String)

將分類名稱和訊息寫入當您實作 TraceListener 類別時所建立的接聽程式,後面跟隨著行結束字元。

(繼承來源 TraceListener)

適用於