TraceSource Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Biedt een set methoden en eigenschappen waarmee toepassingen de uitvoering van code kunnen traceren en traceringsberichten aan hun bron kunnen koppelen.
public ref class TraceSource
public class TraceSource
type TraceSource = class
Public Class TraceSource
- Overname
-
TraceSource
Voorbeelden
In het volgende codevoorbeeld ziet u het gebruik van de TraceSource klasse om traceringen door te sturen naar listeners. In het voorbeeld ziet u ook het schakel- en filtergebruik.
// The following configuration file can be used with this sample.
// When using a configuration file #define ConfigFile.
// <source name="TraceTest" switchName="SourceSwitch" switchType="System.Diagnostics.SourceSwitch" >
// <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" />
// <remove name ="Default" />
// <!-- You can set the level at which tracing is to occur -->
// <add name="SourceSwitch" value="Warning" />
// <!-- You can turn tracing off -->
// <!--add name="SourceSwitch" value="Off" -->
// <trace autoflush="true" indentsize="4"></trace>
#define TRACE
//#define ConfigFile
using System;
using System.Collections;
using System.Diagnostics;
using System.Reflection;
using System.IO;
using System.Security.Permissions;
namespace Testing
{
class TraceTest
{
// Initialize the trace source.
static TraceSource ts = new TraceSource("TraceTest");
[SwitchAttribute("SourceSwitch", typeof(SourceSwitch))]
static void Main()
{
try
{
// Initialize trace switches.
#if(!ConfigFile)
SourceSwitch sourceSwitch = new SourceSwitch("SourceSwitch", "Verbose");
ts.Switch = sourceSwitch;
int idxConsole = ts.Listeners.Add(new System.Diagnostics.ConsoleTraceListener());
ts.Listeners[idxConsole].Name = "console";
#endif
DisplayProperties(ts);
ts.Listeners["console"].TraceOutputOptions |= TraceOptions.Callstack;
ts.TraceEvent(TraceEventType.Warning, 1);
ts.Listeners["console"].TraceOutputOptions = TraceOptions.DateTime;
// Issue file not found message as a warning.
ts.TraceEvent(TraceEventType.Warning, 2, "File Test not found");
// Issue file not found message as a verbose event using a formatted string.
ts.TraceEvent(TraceEventType.Verbose, 3, "File {0} not found.", "test");
// Issue file not found message as information.
ts.TraceInformation("File {0} not found.", "test");
ts.Listeners["console"].TraceOutputOptions |= TraceOptions.LogicalOperationStack;
// Issue file not found message as an error event.
ts.TraceEvent(TraceEventType.Error, 4, "File {0} not found.", "test");
// Test the filter on the ConsoleTraceListener.
ts.Listeners["console"].Filter = new SourceFilter("No match");
ts.TraceData(TraceEventType.Error, 5,
"SourceFilter should reject this message for the console trace listener.");
ts.Listeners["console"].Filter = new SourceFilter("TraceTest");
ts.TraceData(TraceEventType.Error, 6,
"SourceFilter should let this message through on the console trace listener.");
ts.Listeners["console"].Filter = null;
// Use the TraceData method.
ts.TraceData(TraceEventType.Warning, 7, new object());
ts.TraceData(TraceEventType.Warning, 8, new object[] { "Message 1", "Message 2" });
// Activity tests.
ts.TraceEvent(TraceEventType.Start, 9, "Will not appear until the switch is changed.");
ts.Switch.Level = SourceLevels.ActivityTracing | SourceLevels.Critical;
ts.TraceEvent(TraceEventType.Suspend, 10, "Switch includes ActivityTracing, this should appear");
ts.TraceEvent(TraceEventType.Critical, 11, "Switch includes Critical, this should appear");
ts.Flush();
ts.Close();
Console.WriteLine("Press any key to exit.");
Console.Read();
}
catch (Exception e)
{
// Catch any unexpected exception.
Console.WriteLine("Unexpected exception: " + e.ToString());
Console.Read();
}
}
public static void DisplayProperties(TraceSource ts)
{
Console.WriteLine("TraceSource name = " + ts.Name);
Console.WriteLine("TraceSource switch level = " + ts.Switch.Level);
Console.WriteLine("TraceSource switch = " + ts.Switch.DisplayName);
SwitchAttribute[] switches = SwitchAttribute.GetAll(typeof(TraceTest).Assembly);
for (int i = 0; i < switches.Length; i++)
{
Console.WriteLine("Switch name = " + switches[i].SwitchName);
Console.WriteLine("Switch type = " + switches[i].SwitchType);
}
#if(ConfigFile)
// Get the custom attributes for the TraceSource.
Console.WriteLine("Number of custom trace source attributes = "
+ ts.Attributes.Count);
foreach (DictionaryEntry de in ts.Attributes)
Console.WriteLine("Custom trace source attribute = "
+ de.Key + " " + de.Value);
// Get the custom attributes for the trace source switch.
foreach (DictionaryEntry de in ts.Switch.Attributes)
Console.WriteLine("Custom switch attribute = "
+ de.Key + " " + de.Value);
#endif
Console.WriteLine("Number of listeners = " + ts.Listeners.Count);
foreach (TraceListener traceListener in ts.Listeners)
{
Console.Write("TraceListener: " + traceListener.Name + "\t");
// The following output can be used to update the configuration file.
Console.WriteLine("AssemblyQualifiedName = " +
(traceListener.GetType().AssemblyQualifiedName));
}
}
}
}
' The following configuration file can be used with this sample.
' When using a configuration file #define ConfigFile.
' <source name="TraceTest" switchName="SourceSwitch" switchType="System.Diagnostics.SourceSwitch" >
' <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" />
' <remove name ="Default" />
' <!-- You can set the level at which tracing is to occur -->
' <add name="SourceSwitch" value="Warning" />
' <!-- You can turn tracing off -->
' <!--add name="SourceSwitch" value="Off" -->
' <trace autoflush="true" indentsize="4"></trace>
#Const TRACE = True
'#Const ConfigFile = True
Imports System.Collections
Imports System.Diagnostics
Imports System.Reflection
Imports System.IO
Imports System.Security.Permissions
Class TraceTest
' Initialize the trace source.
Private Shared ts As New TraceSource("TraceTest")
<SwitchAttribute("SourceSwitch", GetType(SourceSwitch))> _
Shared Sub Main()
Try
' Initialize trace switches.
#If (ConfigFile = False) Then
Dim sourceSwitch As New SourceSwitch("SourceSwitch", "Verbose")
ts.Switch = sourceSwitch
Dim idxConsole As New Integer()
idxConsole = ts.Listeners.Add(New System.Diagnostics.ConsoleTraceListener())
ts.Listeners(idxConsole).Name = "console"
#End If
DisplayProperties(ts)
ts.Listeners("console").TraceOutputOptions = ts.Listeners("console").TraceOutputOptions Or TraceOptions.Callstack
ts.TraceEvent(TraceEventType.Warning, 1)
ts.Listeners("console").TraceOutputOptions = TraceOptions.DateTime
' Issue file not found message as a warning.
ts.TraceEvent(TraceEventType.Warning, 2, "File Test not found")
' Issue file not found message as a verbose event using a formatted string.
ts.TraceEvent(TraceEventType.Verbose, 3, "File {0} not found.", "test")
' Issue file not found message as information.
ts.TraceInformation("File {0} not found.", "test")
ts.Listeners("console").TraceOutputOptions = ts.Listeners("console").TraceOutputOptions Or TraceOptions.LogicalOperationStack
' Issue file not found message as an error event.
ts.TraceEvent(TraceEventType.Error, 4, "File {0} not found.", "test")
' Test the filter on the ConsoleTraceListener.
ts.Listeners("console").Filter = New SourceFilter("No match")
ts.TraceData(TraceEventType.Error, 5, "SourceFilter should reject this message for the console trace listener.")
ts.Listeners("console").Filter = New SourceFilter("TraceTest")
ts.TraceData(TraceEventType.Error, 6, "SourceFilter should let this message through on the console trace listener.")
ts.Listeners("console").Filter = Nothing
' Use the TraceData method.
ts.TraceData(TraceEventType.Warning, 7, New Object())
ts.TraceData(TraceEventType.Warning, 8, New Object() {"Message 1", "Message 2"})
' Activity tests.
ts.TraceEvent(TraceEventType.Start, 9, "Will not appear until the switch is changed.")
ts.Switch.Level = SourceLevels.ActivityTracing Or SourceLevels.Critical
ts.TraceEvent(TraceEventType.Suspend, 10, "Switch includes ActivityTracing, this should appear")
ts.TraceEvent(TraceEventType.Critical, 11, "Switch includes Critical, this should appear")
ts.Flush()
ts.Close()
Console.WriteLine("Press any key to exit.")
Console.Read()
Catch e As Exception
' Catch any unexpected exception.
Console.WriteLine("Unexpected exception: " + e.ToString())
Console.Read()
End Try
End Sub
Public Shared Sub DisplayProperties(ByVal ts As TraceSource)
Console.WriteLine("TraceSource name = " + ts.Name)
Console.WriteLine("TraceSource switch level = " + ts.Switch.Level.ToString())
Console.WriteLine("TraceSource switch = " + ts.Switch.DisplayName.ToString())
Dim switches As SwitchAttribute() = SwitchAttribute.GetAll(GetType(TraceTest).Assembly)
Dim i As Integer
For i = 0 To switches.Length - 1
Console.WriteLine("Switch name = " + switches(i).SwitchName.ToString())
Console.WriteLine("Switch type = " + switches(i).SwitchType.ToString())
Next i
#If (ConfigFile) Then
' Get the custom attributes for the TraceSource.
Console.WriteLine("Number of custom trace source attributes = " + ts.Attributes.Count)
Dim de As DictionaryEntry
For Each de In ts.Attributes
Console.WriteLine("Custom trace source attribute = " + de.Key + " " + de.Value)
Next de
' Get the custom attributes for the trace source switch.
For Each de In ts.Switch.Attributes
Console.WriteLine("Custom switch attribute = " + de.Key + " " + de.Value)
Next de
#End If
Console.WriteLine("Number of listeners = " + ts.Listeners.Count.ToString())
Dim traceListener As TraceListener
For Each traceListener In ts.Listeners
Console.Write("TraceListener: " + traceListener.Name + vbTab)
' The following output can be used to update the configuration file.
Console.WriteLine("AssemblyQualifiedName = " + traceListener.GetType().AssemblyQualifiedName)
Next traceListener
End Sub
End Class
Opmerkingen
De TraceSource klasse wordt gebruikt door toepassingen om traceringen te produceren die aan de toepassing kunnen worden gekoppeld. TraceSource biedt traceringsmethoden waarmee u eenvoudig gebeurtenissen kunt bijhouden, traceergegevens kunt registreren en informatieve traceringen kunt vastleggen.
In .NET Framework-apps kan traceringsuitvoer van TraceSource worden beheerd door configuratiebestandsinstellingen. Het configuratiebestand bevindt zich in de map met het uitvoerbare bestand van de toepassing en heeft de naam van de toepassing met de .config extensie toegevoegd. De naam van het configuratiebestand voor TraceSourceSample.exe is bijvoorbeeld TraceSourceSample.exe.config. Het configuratiebestand kan worden gebruikt om op te geven waar de traceringsgegevens moeten worden verzonden en welke activiteitsniveaus moeten worden getraceerd. In het volgende voorbeeld ziet u de inhoud van een voorbeeld van een .NET Framework-toepassingsconfiguratiebestand.
<configuration>
<system.diagnostics>
<sources>
<source name="TraceTest" switchName="SourceSwitch"
switchType="System.Diagnostics.SourceSwitch" >
<listeners>
<add name="console" />
<remove name ="Default" />
</listeners>
</source>
</sources>
<switches>
<!-- You can set the level at which tracing is to occur -->
<add name="SourceSwitch" value="Warning" />
<!-- You can turn tracing off -->
<!--add name="SourceSwitch" value="Off" -->
</switches>
<sharedListeners>
<add name="console"
type="System.Diagnostics.ConsoleTraceListener"
initializeData="false"/>
</sharedListeners>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="console" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
De TraceSource klasse wordt aangeduid met de naam van een bron, meestal de naam van de toepassing. De traceringsberichten die afkomstig zijn van een bepaald onderdeel kunnen worden gestart door een bepaalde traceringsbron, zodat alle berichten die afkomstig zijn van dat onderdeel gemakkelijk kunnen worden geïdentificeerd.
TraceSource definieert traceringsmethoden, maar biedt geen specifiek mechanisme voor het genereren en opslaan van traceringsgegevens. De traceringsgegevens worden geproduceerd door traceringslisteners, die plug-ins zijn die kunnen worden geladen door traceringsbronnen.
Note
U moet de traceringsmethoden niet aanroepen tijdens het voltooien. Dit kan ertoe leiden dat er een ObjectDisposedException gegooid wordt.
U kunt het doel van de traceringsuitvoer aanpassen door exemplaren toe te voegen aan of te verwijderen TraceListener uit de verzameling die is opgeslagen in de TraceSource.Listeners eigenschap. Standaard wordt traceringsuitvoer geproduceerd met behulp van een exemplaar van de DefaultTraceListener klasse.
In het voorgaande voorbeeld van .NET Framework-app-configuratiebestand ziet u hoe u de DefaultTraceListener verwijdert en een ConsoleTraceListener toevoegt om de traceringsuitvoer voor de traceringsbron te produceren. Zie <listeners> en <sharedListeners> voor meer informatie.
Note
Het toevoegen van een traceerlistener aan de Listeners verzameling kan ertoe leiden dat er een uitzondering wordt gegenereerd tijdens het traceren, als een resource die door de traceerlister wordt gebruikt, niet beschikbaar is. De voorwaarden en de uitzondering die is gegenereerd, zijn afhankelijk van de traceringslistener en kunnen niet worden opgesomd in dit onderwerp. Het kan handig zijn om aanroepen naar de TraceSource methoden in try/catch blokken te plaatsen om eventuele uitzonderingen van traceerlisteners te detecteren en te verwerken.
De SourceSwitch klasse biedt de middelen om de traceringsuitvoer dynamisch te beheren. Voor .NET Framework-apps ziet u in het voorgaande configuratiebestand hoe u tracering kunt uitschakelen vanuit een traceringsbron en het niveau kunt beheren waarop tracering plaatsvindt. U kunt de waarde van de bronswitch wijzigen zonder de toepassing opnieuw te compileren. Zie en instructies voor het maken, Switchinitialiseren en configureren van traceringsswitches voor meer informatie over het gebruik van het configuratiebestand voor het instellen van een switch.
Note
Als u een configuratiebestand wijzigt terwijl een toepassing wordt uitgevoerd, moet de toepassing worden gestopt en opnieuw worden gestart of moet de Refresh methode worden aangeroepen voordat de nieuwe instellingen van kracht worden.
De TraceEventType opsomming wordt gebruikt om het gebeurtenistype van het traceringsbericht te definiëren. Traceringsfilters gebruiken om TraceEventType te bepalen of een traceerlist het traceringsbericht moet produceren.
De tracelisteners kunnen eventueel een extra laag van filteren via een traceringsfilter hebben. Als een traceerlist een gekoppeld filter heeft, roept de listener de ShouldTrace methode op dat filter aan om te bepalen of de traceringsgegevens al dan niet moeten worden geproduceerd.
De traceerlisteners gebruiken de waarden van de Trace klasse-eigenschappen IndentIndentSizeen AutoFlush om traceringsuitvoer op te maken. In .NET Framework-apps kunt u kenmerken van het configuratiebestand gebruiken om de eigenschappen Indent, IndentSize en AutoFlush in te stellen. In het volgende voorbeeld wordt de AutoFlush eigenschap ingesteld op false en de IndentSize eigenschap op 3.
<configuration>
<system.diagnostics>
<trace autoflush="false" indentsize="3" />
</system.diagnostics>
</configuration>
Constructors
| Name | Description |
|---|---|
| TraceSource(String, SourceLevels) |
Initialiseert een nieuw exemplaar van de TraceSource klasse met behulp van de opgegeven naam voor de bron en het standaardbronniveau waarop tracering moet plaatsvinden. |
| TraceSource(String) |
Initialiseert een nieuw exemplaar van de TraceSource klasse met behulp van de opgegeven naam voor de bron. |
Eigenschappen
| Name | Description |
|---|---|
| Attributes |
Hiermee haalt u de aangepaste switchkenmerken op die zijn gedefinieerd in het configuratiebestand van de toepassing. |
| Listeners |
Hiermee haalt u de verzameling traceerlisteners voor de traceringsbron op. |
| Name |
Hiermee haalt u de naam van de traceringsbron op. |
| Switch |
Hiermee haalt u de waarde van de bronswitch op of stelt u deze in. |
Methoden
| Name | Description |
|---|---|
| Close() |
Hiermee sluit u alle traceerlisteners in de traceerlistenerverzameling. |
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| Flush() |
Hiermee worden alle traceerlisteners in de traceerlistenerverzameling leeggemaakt. |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetSupportedAttributes() |
Hiermee haalt u de aangepaste kenmerken op die worden ondersteund door de traceringsbron. |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |
| TraceData(TraceEventType, Int32, Object) |
Schrijft traceringsgegevens naar de traceerlisteners in de Listeners verzameling met behulp van het opgegeven gebeurtenistype, gebeurtenis-id en traceringsgegevens. |
| TraceData(TraceEventType, Int32, Object[]) |
Schrijft traceringsgegevens naar de traceerlisteners in de Listeners verzameling met behulp van het opgegeven gebeurtenistype, gebeurtenis-id en traceringsgegevensmatrix. |
| TraceEvent(TraceEventType, Int32, String, Object[]) |
Hiermee schrijft u een tracerings gebeurtenis naar de traceerlisteners in de Listeners verzameling met behulp van het opgegeven gebeurtenistype, gebeurtenis-id en argumentmatrix en -indeling. |
| TraceEvent(TraceEventType, Int32, String) |
Hiermee schrijft u een traceer-gebeurtenisbericht naar de traceerlisteners in de Listeners verzameling met behulp van het opgegeven gebeurtenistype, de gebeurtenis-id en het bericht. |
| TraceEvent(TraceEventType, Int32) |
Hiermee schrijft u een traceringsbericht naar de traceerlisteners in de Listeners verzameling met behulp van het opgegeven gebeurtenistype en de gebeurtenis-id. |
| TraceInformation(String, Object[]) |
Hiermee schrijft u een informatief bericht naar de traceerlisteners in de Listeners verzameling met behulp van de opgegeven objectmatrix en opmaakgegevens. |
| TraceInformation(String) |
Hiermee schrijft u een informatief bericht naar de traceringslisteners in de Listeners verzameling met behulp van het opgegeven bericht. |
| TraceTransfer(Int32, String, Guid) |
Hiermee schrijft u een traceringsoverdrachtbericht naar de traceerlisteners in de Listeners verzameling met behulp van de opgegeven numerieke id, bericht en gerelateerde activiteits-id. |
Van toepassing op
Veiligheid thread
Dit type is thread veilig.