EventSchemaTraceListener Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Leitet die Ablaufverfolgung oder das Debuggen der Ausgabe von End-to-End-Ereignissen an eine XML-codierte, schemakonforme Protokolldatei weiter.
public ref class EventSchemaTraceListener : System::Diagnostics::TextWriterTraceListener
public class EventSchemaTraceListener : System.Diagnostics.TextWriterTraceListener
type EventSchemaTraceListener = class
inherit TextWriterTraceListener
Public Class EventSchemaTraceListener
Inherits TextWriterTraceListener
- Vererbung
Beispiele
Im folgenden Codebeispiel wird die Verwendung der EventSchemaTraceListener Klasse veranschaulicht.
#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
Hinweise
Die EventSchemaTraceListener Klasse stellt die Ablaufverfolgung von End-to-End-schemakonformen Ereignissen bereit. Sie können die End-to-End-Ablaufverfolgung für ein System mit heterogenen Komponenten verwenden, die Thread-, AppDomainProzess- und Computergrenzen überschreiten. Ein standardisiertes Ereignisschema ermöglicht die Ablaufverfolgung über diese Grenzen hinweg. Das Schema ermöglicht das Hinzufügen von benutzerdefinierten, schemakonformen Elementen. Sie können das Dienstablaufverfolgungs-Viewer-Tool (SvcTraceViewer.exe) verwenden, um die Ereignisdaten anzuzeigen.
EventSchemaTraceListener ist für die Protokollierung der Leistung mit impliziter Unterstützung für die sperrfreie Ablaufverfolgung optimiert.
Die EventSchemaTraceListener Klasse konvertiert Ablaufverfolgungs- und Debugginginformationen in einen XML-codierten Textstream. Die Beschreibung der XML-Ausgabe wird in den Tabellen weiter unten in diesem Abschnitt angezeigt.
Sie können ein EventSchemaTraceListener Objekt in Ihrem Code erstellen. Alternativ können Sie für .NET Framework-Apps ein EventSchemaTraceListener Objekt über die Anwendungskonfigurationsdatei aktivieren oder deaktivieren und dann das konfigurierte EventSchemaTraceListener Objekt in Ihrer Anwendung verwenden. Informationen zur Verwendung von Konfigurationsdateien für die Ablaufverfolgung und das Debuggen in .NET Framework-Apps finden Sie unter Ablaufverfolgungs- und Debugeinstellungenschema.
Um ein EventSchemaTraceListener Objekt in einer .NET Framework-App zu konfigurieren, ändern Sie die Konfigurationsdatei, die dem Namen Ihrer Anwendung entspricht. In dieser Datei können Sie die Eigenschaften für einen Listener hinzufügen, entfernen oder festlegen. Die Konfigurationsdatei sollte wie folgt formatiert werden:
<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>
Die EventSchemaTraceListener Klasse erbt die Filter Eigenschaft von der Basisklasse TraceListener. Die Filter Eigenschaft ermöglicht eine zusätzliche Ebene der Ablaufverfolgungsausgabefilterung im Listener. Wenn ein Filter vorhanden ist, rufen die Methoden des Ablaufverfolgungslisteners die TraceShouldTrace Methode des Filters auf, um zu bestimmen, ob die Ablaufverfolgung ausgegeben werden soll.
Wenn versucht wird, in eine datei zu schreiben, die verwendet wird oder nicht verfügbar ist, wird dem Dateinamen automatisch ein GUID-Suffix hinzugefügt.
Hinweis
Listener-Methoden sollen von Methoden der DebugKlassen aufgerufen TraceTraceSource werden. Rufen Sie die Listenermethoden nicht direkt aus dem Anwendungscode auf. Der EventSchemaTraceListener Listener ist in erster Linie für die Verwendung durch die TraceSource Klasse vorgesehen.
In der folgenden Tabelle werden die Elemente und Attribute der XML-Ausgabe beschrieben.
| Element | Attribute | Output | Hinweise |
|---|---|---|---|
CallStack |
Nichts | Hängt vom Vorhandensein des Callstack Flags in der TraceOutputOptions Eigenschaft ab. | Sonderzeichen wie > oder < werden durch Escapesequenzen ersetzt. Sehen Sie sich die Escapezeichenübersetzungstabelle in der nächsten Tabelle an. |
Computer |
Nichts | Immer vorhanden. | Dieses Element stellt den Wert der MachineName Eigenschaft dar. |
Correlation |
ActivityID |
Immer vorhanden. | Wenn ActivityID nicht angegeben, ist die Standardeinstellung eine leere GUID. |
RelatedActivityID |
Hängt vom Vorhandensein des relatedActivityId Parameters im Trace Methodenaufruf ab. |
Das RelatedActivityID Attribut entspricht dem relatedActivityId Parameter der TraceTransfer Methode. |
|
Data |
Nichts | Immer vorhanden. | Dieses Element stellt die Parametereingabe (data) dar. Für jedes Datenobjekt wird ein Element bereitgestellt. Im Fall von Ereignisprotokollen enthält das Data Element ESCAPE-XML-Daten. Im Falle von Datenprotokollen enthält das Data Element nicht gescapete Daten. Die Datenprotokollausgabe verwendet die ToString Methode der übergebenen Datenobjekte. |
Event |
Nichts | Immer vorhanden. | Dieses Element enthält ein Ablaufverfolgungsereignis. |
EventData |
Nichts | Für Ereignisprotokolle vorhanden. | Dieses Element stellt die Parametereingabe dar (message, args). Sie enthält Data Elemente mit Escape-XML-Daten, die durch Aufrufen der TraceEvent Methode erstellt werden. |
EventID |
Nichts | Immer vorhanden. | Dieses Element stellt die Parametereingabe (id) dar. |
Execution |
ProcessID |
Hängt vom Vorhandensein des ProcessId Flags in der TraceOutputOptions Eigenschaft ab. | Das ProcessID Attribut wird in der TraceEventCache. |
ThreadID |
Vorhanden, wenn ProcessID vorhanden ist. |
Das ThreadID Attribut wird in der TraceEventCache. |
|
Level |
Nichts | Immer vorhanden. | Dieses Element stellt die Parametereingabe dar (der numerische Wert von eventType). Parameterwerte, die größer als 255 sind, werden als Ebene 8 ausgegeben, die darstellt TraceEventType.Information. Ablaufverfolgungsereignistypen Critical, Error, Warning, Information, und Verbose werden als Ebene 1, 2, 4, 8 und 10 ausgegeben. |
LogicalOperationStack |
Nichts | Hängt vom Vorhandensein des LogicalOperationStack Flags in der TraceOutputOptions Eigenschaft ab. | Es kann nur ein logischer Vorgang vorhanden sein. Daher werden die Werte als LogicalOperation Knoten unter dem LogicalOperationStack Element geschrieben. |
OpCode |
Nichts | Vorhanden, wenn Level größer als 255 ist. |
Dieses Element stellt Trace-Ereignistypen dar, die numerische Werte haben, die größer als 255 sind. Start, , StopSuspend, Resumeoder Transfer sind Ausgabe als Ebene 1, 2, 4, 8 und 10. |
Provider |
GUID |
Immer vorhanden. | Immer leer. |
RenderingInfo |
Culture |
Immer vorhanden. | Dieses Attribut stellt eine Ressourcenzeichenfolge für den Ereignistyp dar. Es ist immer "en-EN\". |
System |
Name |
Immer vorhanden. | |
TimeCreated |
SystemTime |
Hängt vom Vorhandensein des DateTime Flags in der TraceOutputOptions Eigenschaft ab. | Die Uhrzeit ist der Wert der TraceEventCache.DateTime Eigenschaft. Diese Eigenschaft wird als koordinierte Weltzeit ausgedrückt. |
TimeStamp |
Nichts | Hängt vom Vorhandensein des Timestamp Flags in der TraceOutputOptions Eigenschaft ab. | Dieses Element wird in der TraceEventCache. |
UserData |
Nichts | Für Datenprotokolle vorhanden. | Dieses Element enthält Data Elemente mit nicht gescapeten, vom Benutzer bereitgestellten Daten aus einer TraceData Methode. |
In der folgenden Tabelle sind die Zeichen dargestellt, die in der XML-Ausgabe escapen. Escaping erfolgt in allen Elementen und Attributen außer dem UserData Element, das vom Benutzer bereitgestellte, nicht gescapete Daten enthält. Das UserData Element ist ein Ergebnis von Aufrufen der TraceData Methode.
| Escapezeichen | Wert |
|---|---|
| & | & |
| < | < |
| > | > |
| " | " |
| |' | |
| 0xD | |
| 0xA |
Konstruktoren
| Name | Beschreibung |
|---|---|
| EventSchemaTraceListener(String, String, Int32, TraceLogRetentionOption, Int64, Int32) |
Initialisiert eine neue Instanz der EventSchemaTraceListener Klasse mit dem angegebenen Namen und der angegebenen Puffergröße, wobei die angegebene Datei mit der angegebenen Protokollaufbewahrungsrichtlinie, der maximalen Größe und der Dateianzahl als Empfänger der Debug- und Ablaufverfolgungsausgabe verwendet wird. |
| EventSchemaTraceListener(String, String, Int32, TraceLogRetentionOption, Int64) |
Initialisiert eine neue Instanz der EventSchemaTraceListener Klasse mit dem angegebenen Namen und der angegebenen Puffergröße, wobei die angegebene Datei mit der angegebenen Protokollaufbewahrungsrichtlinie und der maximalen Größe als Empfänger der Debug- und Ablaufverfolgungsausgabe verwendet wird. |
| EventSchemaTraceListener(String, String, Int32, TraceLogRetentionOption) |
Initialisiert eine neue Instanz der EventSchemaTraceListener Klasse mit dem angegebenen Namen und der angegebenen Puffergröße, wobei die angegebene Datei mit der angegebenen Protokollaufbewahrungsrichtlinie als Empfänger der Debug- und Ablaufverfolgungsausgabe verwendet wird. |
| EventSchemaTraceListener(String, String, Int32) |
Initialisiert eine neue Instanz der EventSchemaTraceListener Klasse mit dem angegebenen Namen und der angegebenen Puffergröße, wobei die angegebene Datei als Empfänger der Debug- und Ablaufverfolgungsausgabe verwendet wird. |
| EventSchemaTraceListener(String, String) |
Initialisiert eine neue Instanz der EventSchemaTraceListener Klasse mit dem angegebenen Namen, wobei die angegebene Datei als Empfänger der Debug- und Ablaufverfolgungsausgabe verwendet wird. |
| EventSchemaTraceListener(String) |
Initialisiert eine neue Instanz der EventSchemaTraceListener Klasse, wobei die angegebene Datei als Empfänger der Debug- und Ablaufverfolgungsausgabe verwendet wird. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Attributes |
Ruft die benutzerdefinierten Listenerattribute der Ablaufverfolgung ab, die in der Anwendungskonfigurationsdatei definiert sind. (Geerbt von TraceListener) |
| BufferSize |
Ruft die Größe des Ausgabepuffers ab. |
| Filter |
Dient zum Abrufen oder Festlegen des Ablaufverfolgungsfilters für den Ablaufverfolgungslistener. (Geerbt von TraceListener) |
| IndentLevel |
Dient zum Abrufen oder Festlegen der Einzugsebene. (Geerbt von TraceListener) |
| IndentSize |
Dient zum Abrufen oder Festlegen der Anzahl von Leerzeichen in einem Einzug. (Geerbt von TraceListener) |
| IsThreadSafe |
Ruft einen Wert ab, der angibt, ob der Ablaufverfolgungslistener threadsicher ist. |
| MaximumFileSize |
Ruft die maximale Größe der Protokolldatei ab. |
| MaximumNumberOfFiles |
Ruft die maximale Anzahl von Protokolldateien ab. |
| Name |
Dient zum Abrufen oder Festlegen eines Namens für dieses TraceListener. (Geerbt von TraceListener) |
| NeedIndent |
Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob die Ausgabe eingezogen werden soll. (Geerbt von TraceListener) |
| TraceLogRetentionOption |
Ruft die Aufbewahrungsoption für das Ablaufverfolgungsprotokoll für die Datei ab. |
| TraceOutputOptions |
Ruft die Ausgabeoptionen für die Ablaufverfolgung ab oder legt sie fest. (Geerbt von TraceListener) |
| Writer |
Ruft den zugrunde liegenden Text writer ab, der in die Protokolldatei schreibt, oder legt diesen fest. |
Methoden
| Name | Beschreibung |
|---|---|
| Close() |
Schließt die Protokolldatei für diesen Listener, sodass sie keine Ablaufverfolgungs- oder Debugausgabe mehr empfängt. |
| CreateObjRef(Type) |
Erstellt ein Objekt, das alle relevanten Informationen enthält, die zum Generieren eines Proxys erforderlich sind, der für die Kommunikation mit einem Remoteobjekt verwendet wird. (Geerbt von MarshalByRefObject) |
| Dispose() |
Veröffentlicht alle ressourcen, die von der TraceListener. (Geerbt von TraceListener) |
| Dispose(Boolean) |
Entfernt dieses TextWriterTraceListener Objekt. (Geerbt von TextWriterTraceListener) |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| Fail(String, String) |
Schreibt Fehlerinformationen, einschließlich einer einfachen Fehlermeldung und einer detaillierten Fehlermeldung, in die Protokolldatei. |
| Fail(String) |
Gibt eine Fehlermeldung an den Listener aus, den Sie beim Implementieren der TraceListener Klasse erstellen. (Geerbt von TraceListener) |
| Flush() |
Bewirkt, dass gepufferte Daten in das Protokoll für diesen Listener geschrieben werden. |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetLifetimeService() |
Veraltet.
Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinie für diese Instanz steuert. (Geerbt von MarshalByRefObject) |
| GetSupportedAttributes() |
Ruft die benutzerdefinierten XML-Konfigurationsattribute ab, die der Ablaufverfolgungslistener unterstützt. |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| InitializeLifetimeService() |
Veraltet.
Ruft ein Lebensdauerdienstobjekt ab, um die Lebensdauerrichtlinie für diese Instanz zu steuern. (Geerbt von MarshalByRefObject) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| MemberwiseClone(Boolean) |
Erstellt eine flache Kopie des aktuellen MarshalByRefObject Objekts. (Geerbt von MarshalByRefObject) |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
| TraceData(TraceEventCache, String, TraceEventType, Int32, Object) |
Schreibt Ablaufverfolgungsinformationen, ein einzelnes Datenobjekt und Ereignisinformationen in die Protokolldatei. |
| TraceData(TraceEventCache, String, TraceEventType, Int32, Object[]) |
Schreibt Ablaufverfolgungsinformationen, mehrere Datenobjekte und Ereignisinformationen in die Protokolldatei. |
| TraceEvent(TraceEventCache, String, TraceEventType, Int32, String, Object[]) |
Schreibt Ablaufverfolgungsinformationen, eine formatierte Nachricht und Ereignisinformationen in die Protokolldatei. |
| TraceEvent(TraceEventCache, String, TraceEventType, Int32, String) |
Schreibt Ablaufverfolgungsinformationen, eine Nachricht und Ereignisinformationen in die Protokolldatei. |
| TraceEvent(TraceEventCache, String, TraceEventType, Int32) |
Schreibt Ablaufverfolgungs- und Ereignisinformationen in die spezifische Ausgabe des Listeners. (Geerbt von TraceListener) |
| TraceTransfer(TraceEventCache, String, Int32, String, Guid) |
Schreibt Ablaufverfolgungsinformationen, einschließlich der Identität einer verwandten Aktivität, einer Nachricht und Ereignisinformationen, in die Protokolldatei. |
| Write(Object, String) |
Schreibt einen Kategorienamen und den Wert der Methode des Objekts ToString() in den Listener, den Sie beim Implementieren der TraceListener Klasse erstellen. (Geerbt von TraceListener) |
| Write(Object) |
Schreibt den Wert der Methode des Objekts ToString() in den Listener, den Sie beim Implementieren der TraceListener Klasse erstellen. (Geerbt von TraceListener) |
| Write(String, String) |
Schreibt einen Kategorienamen und eine Nachricht in den Listener, den Sie beim Implementieren der TraceListener Klasse erstellen. (Geerbt von TraceListener) |
| Write(String) |
Schreibt eine Nachricht in die Protokolldatei, ohne zusätzliche Kontextinformationen bereitzustellen. |
| WriteIndent() |
Schreibt den Einzug in den Listener, den Sie beim Implementieren dieser Klasse erstellen, und setzt die NeedIndent Eigenschaft auf |
| WriteLine(Object, String) |
Schreibt einen Kategorienamen und den Wert der Methode des Objekts ToString() in den Listener, den Sie beim Implementieren der TraceListener Klasse erstellen, gefolgt von einem Zeilenterminator. (Geerbt von TraceListener) |
| WriteLine(Object) |
Schreibt den Wert der Methode des Objekts ToString() in den Listener, den Sie beim Implementieren der TraceListener Klasse erstellen, gefolgt von einem Zeilenterminator. (Geerbt von TraceListener) |
| WriteLine(String, String) |
Schreibt einen Kategorienamen und eine Nachricht in den Listener, den Sie beim Implementieren der TraceListener Klasse erstellen, gefolgt von einem Zeilenterminator. (Geerbt von TraceListener) |
| WriteLine(String) |
Schreibt eine Nachricht gefolgt von dem aktuellen Zeilenabschlusszeichen in die Protokolldatei, ohne zusätzliche Kontextinformationen bereitzustellen. |