TraceSource Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Innehåller en uppsättning metoder och egenskaper som gör det möjligt för program att spåra körningen av kod och associera spårningsmeddelanden med källan.
public ref class TraceSource
public class TraceSource
type TraceSource = class
Public Class TraceSource
- Arv
-
TraceSource
Exempel
I följande kodexempel visas hur klassen används TraceSource för att vidarebefordra spårningar till lyssnare. Exemplet visar också växlings- och filteranvändning.
// 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
Kommentarer
Klassen TraceSource används av program för att skapa spårningar som kan associeras med programmet. TraceSource innehåller spårningsmetoder som gör att du enkelt kan spåra händelser, spåra data och utfärda informationsspårningar.
I .NET Framework-appar kan spårningsutdata från TraceSource styras av konfigurationsfilinställningar. Konfigurationsfilen finns i mappen med det körbara programmet och har namnet på programmet med tillägget .config tillagt. Till exempel är namnet på konfigurationsfilen för TraceSourceSample.exe TraceSourceSample.exe.config. Konfigurationsfilen kan användas för att ange var spårningsinformationen ska skickas och vilka aktivitetsnivåer som ska spåras. I följande exempel visas innehållet i ett exempel .NET Framework-programkonfigurationsfil.
<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>
Klassen TraceSource identifieras med namnet på en källa, vanligtvis namnet på programmet. Spårningsmeddelanden som kommer från en viss komponent kan initieras av en viss spårningskälla, vilket gör att alla meddelanden som kommer från komponenten enkelt kan identifieras.
TraceSource definierar spårningsmetoder men tillhandahåller egentligen ingen specifik mekanism för att generera och lagra spårningsdata. Spårningsdata produceras av spårningslyssnare, som är plugin-program som kan läsas in av spårningskällor.
Note
Du bör inte anropa spårningsmetoderna under slutförande. Detta kan leda till att en ObjectDisposedException utlöses.
Du kan anpassa spårningsutdatans mål genom att lägga till eller ta bort TraceListener instanser till eller från samlingen som lagras i TraceSource.Listeners egenskapen. Som standard skapas spårningsutdata med hjälp av en instans av DefaultTraceListener klassen.
Föregående .NET Framework-appkonfigurationsfilexempel visar hur du tar bort DefaultTraceListener och lägger till en ConsoleTraceListener för att skapa spårningsutdata för spårningskällan. Mer information finns i <lyssnare> och <sharedListeners>.
Note
Om du lägger till en spårningslyssnare i Listeners samlingen kan ett undantag genereras under spårningen, om en resurs som används av spårningslyssnaren inte är tillgänglig. Villkoren och undantaget som genereras beror på spårningslyssnaren och kan inte räknas upp i det här avsnittet. Det kan vara användbart att ringa anrop till TraceSource metoderna i try/catch block för att identifiera och hantera eventuella undantag från spårningslyssnare.
Klassen SourceSwitch ger möjlighet att dynamiskt kontrollera spårningsutdata. För .NET Framework-appar visar exemplet i föregående konfigurationsfil hur du kan inaktivera spårning från en spårningskälla och kontrollera den nivå där spårning sker. Du kan ändra värdet för källväxeln utan att kompilera om programmet. Information om hur du använder konfigurationsfilen för att ange en växel finns i Switch och Så här skapar, initierar och konfigurerar du spårningsväxlar.
Note
Om du ändrar en konfigurationsfil medan ett program körs måste programmet stoppas och startas om eller Refresh så måste metoden anropas innan de nya inställningarna börjar gälla.
Uppräkningen TraceEventType används för att definiera händelsetypen för spårningsmeddelandet. Spårningsfilter TraceEventType använder för att avgöra om en spårningslyssnare ska generera spårningsmeddelandet.
Spårningslyssnare kan också ha ytterligare ett filtreringslager via ett spårningsfilter. Om en spårningslyssnare har ett associerat filter anropar lyssnaren ShouldTrace metoden för filtret för att avgöra om spårningsinformationen ska skapas eller inte.
Spårningslyssnare använder värdena för klassegenskaperna TraceIndent, IndentSizeoch AutoFlush för att formatera spårningsutdata. I .NET Framework-appar kan du använda konfigurationsfilattribut för att ange egenskaperna Indent, IndentSize och AutoFlush. I följande exempel anges AutoFlush egenskapen till false och egenskapen IndentSize till 3.
<configuration>
<system.diagnostics>
<trace autoflush="false" indentsize="3" />
</system.diagnostics>
</configuration>
Konstruktorer
| Name | Description |
|---|---|
| TraceSource(String, SourceLevels) |
Initierar en ny instans av TraceSource klassen med det angivna namnet på källan och standardkällnivån där spårning ska ske. |
| TraceSource(String) |
Initierar en ny instans av TraceSource klassen med det angivna namnet på källan. |
Egenskaper
| Name | Description |
|---|---|
| Attributes |
Hämtar de anpassade växelattribut som definierats i programkonfigurationsfilen. |
| Listeners |
Hämtar samlingen med spårningslyssnare för spårningskällan. |
| Name |
Hämtar namnet på spårningskällan. |
| Switch |
Hämtar eller anger källväxelvärdet. |
Metoder
| Name | Description |
|---|---|
| Close() |
Stänger alla spårningslyssnare i samlingen spårningslyssnare. |
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| Flush() |
Rensar alla spårningslyssnare i samlingen spårningslyssnare. |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetSupportedAttributes() |
Hämtar de anpassade attribut som stöds av spårningskällan. |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |
| TraceData(TraceEventType, Int32, Object) |
Skriver spårningsdata till spårningslyssnare Listeners i samlingen med den angivna händelsetypen, händelseidentifieraren och spårningsdata. |
| TraceData(TraceEventType, Int32, Object[]) |
Skriver spårningsdata till spårningslyssnare Listeners i samlingen med den angivna händelsetypen, händelseidentifieraren och spårningsdatamatrisen. |
| TraceEvent(TraceEventType, Int32, String, Object[]) |
Skriver en spårningshändelse till spårningslyssnare Listeners i samlingen med den angivna händelsetypen, händelseidentifieraren och argumentmatrisen och formatet. |
| TraceEvent(TraceEventType, Int32, String) |
Skriver ett spårningshändelsemeddelande till spårningslyssnare Listeners i samlingen med den angivna händelsetypen, händelseidentifieraren och meddelandet. |
| TraceEvent(TraceEventType, Int32) |
Skriver ett spårningshändelsemeddelande till spårningslyssnare Listeners i samlingen med den angivna händelsetypen och händelseidentifieraren. |
| TraceInformation(String, Object[]) |
Skriver ett informationsmeddelande till spårningslyssnare Listeners i samlingen med hjälp av den angivna objektmatrisen och formateringsinformationen. |
| TraceInformation(String) |
Skriver ett informationsmeddelande till spårningslyssnare Listeners i samlingen med det angivna meddelandet. |
| TraceTransfer(Int32, String, Guid) |
Skriver ett spårningsöverföringsmeddelande till spårningslyssnare Listeners i samlingen med den angivna numeriska identifieraren, meddelandet och relaterade aktivitetsidentifieraren. |
Gäller för
Trådsäkerhet
Den här typen är trådsäker.