EventSchemaTraceListener 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將端對端事件的追蹤或偵錯輸出導向至 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>
類別 EventSchemaTraceListener 會 Filter 繼承基類 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。 追蹤事件類型 Critical、 Error、 Warning、 Information和 Verbose 分別輸出為層級 1、2、4、8 和 10。 |
LogicalOperationStack |
None | 取決於屬性中的TraceOutputOptions旗標是否存在LogicalOperationStack。 | 只有一個邏輯作業可以存在。 因此,值會寫入為 LogicalOperation 專案底下的 LogicalOperationStack 節點。 |
OpCode |
None | 當大於 255 時 Level 存在。 |
這個專案代表數值大於 255 的 Trace 事件類型。 Start、 Stop、 Suspend、 Resume或 Transfer 分別輸出為層級 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 |
取得或設定會寫入記錄檔的基礎文字寫入器。 |