TraceSource Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Olyan módszereket és tulajdonságokat biztosít, amelyek lehetővé teszik az alkalmazások számára a kód végrehajtásának nyomon követését és a nyomkövetési üzenetek forráshoz való társítását.
public ref class TraceSource
public class TraceSource
type TraceSource = class
Public Class TraceSource
- Öröklődés
-
TraceSource
Példák
Az alábbi példakód azt mutatja be, hogy az osztály használatával továbbítja a TraceSource nyomkövetéseket a figyelőknek. A példa a kapcsoló- és szűrőhasználatot is bemutatja.
// 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
Megjegyzések
Az TraceSource osztályt az alkalmazások az alkalmazáshoz társítható nyomkövetések előállítására használják. TraceSource Olyan nyomkövetési módszereket biztosít, amelyekkel egyszerűen nyomon követheti az eseményeket, nyomon követheti az adatokat, és információs nyomkövetéseket bocsáthat ki.
A .NET Framework-alkalmazásokban a TraceSource nyomkövetési kimenetét konfigurációs fájlbeállítások vezérelhetik. A konfigurációs fájl abban a mappában található, amelyben az alkalmazás végrehajtható, és az alkalmazás neve hozzá van adva a .config kiterjesztéssel. A TraceSourceSample.exe konfigurációs fájljának neve például TraceSourceSample.exe.config. A konfigurációs fájl segítségével megadhatja, hogy hol kell elküldeni a nyomkövetési információkat, és hogy milyen tevékenységszinteket kell nyomon követni. Az alábbi példa egy .NET keretrendszeralkalmazás konfigurációs fájljának tartalmát mutatja be.
<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>
Az TraceSource osztályt egy forrás neve azonosítja, általában az alkalmazás neve. Az adott összetevőből érkező nyomkövetési üzeneteket egy adott nyomkövetési forrás kezdeményezheti, így az összetevőtől érkező összes üzenet könnyen azonosítható.
TraceSource nyomkövetési módszereket határoz meg, de valójában nem biztosít konkrét mechanizmust a nyomkövetési adatok létrehozásához és tárolásához. A nyomkövetési adatokat nyomkövetési figyelők állítják elő, amelyek a nyomkövetési források által betölthető beépülő modulok.
Note
A véglegesítés során ne hívja meg a nyomkövetési módszereket. Ha így tesz, az egy dobáshoz vezethet ObjectDisposedException .
A nyomkövetési kimenet célját testre szabhatja a tulajdonságban TraceListener tárolt gyűjtemény példányainak hozzáadásával vagy eltávolításávalTraceSource.Listeners. Alapértelmezés szerint a nyomkövetési kimenet az DefaultTraceListener osztály egy példányával jön létre.
Az előző .NET Framework-alkalmazás konfigurációs fájlpéldái bemutatják a DefaultTraceListener eltávolítását és egy ConsoleTraceListener hozzáadását a nyomkövetési forrás nyomkövetési kimenetének létrehozásához. További információ: <figyelők> és <sharedListeners>.
Note
A nyomkövetési figyelő gyűjteményhez való hozzáadása kivételt okozhat a Listeners nyomkövetés során, ha a nyomkövetési figyelő által használt erőforrás nem érhető el. A kibocsátott feltételek és kivétel a nyomkövetési figyelőtől függenek, és ebben a témakörben nem lehet számba venni. A nyomkövetési figyelők kivételeinek észleléséhez és kezeléséhez hasznos lehet a blokkokban lévő TraceSourcetry/ metódusokhoz intézett hívások catch indítása.
Az SourceSwitch osztály lehetővé teszi a nyomkövetési kimenet dinamikus vezérlését. A .NET Framework-alkalmazások esetében az előző konfigurációs fájlpéldából megtudhatja, hogyan kapcsolhatja ki a nyomkövetést egy nyomkövetési forrásból, és hogyan szabályozhatja a nyomkövetési szintet. Az alkalmazás újrafordítása nélkül módosíthatja a forráskapcsoló értékét. A kapcsoló beállításához használt konfigurációs fájlról további információt a következő témakörben talál Switch: Nyomkövetési kapcsolók létrehozása, inicializálása és konfigurálása.
Note
Ha egy konfigurációs fájlt módosít egy alkalmazás végrehajtása közben, az alkalmazást le kell állítani és újra kell indítani, vagy a Refresh metódust az új beállítások érvénybe lépése előtt meg kell hívni.
Az TraceEventType enumerálás a nyomkövetési üzenet eseménytípusának meghatározására szolgál. A nyomkövetési TraceEventType szűrők segítségével megállapíthatja, hogy a nyomkövetési figyelőnek létre kell-e állítania a nyomkövetési üzenetet.
A nyomkövetési figyelők opcionálisan további szűrési réteggel is rendelkezhetnek egy nyomkövetési szűrőn keresztül. Ha egy nyomkövetési figyelőhöz társított szűrő tartozik, a figyelő meghívja a ShouldTrace szűrő metódusát annak megállapításához, hogy a nyomkövetési információ létrejön-e.
A nyomkövetési figyelők az Trace osztálytulajdonságok Indentértékeit használják, IndentSizeés AutoFlush formázják a nyomkövetési kimenetet. A .NET Framework-alkalmazásokban konfigurációs fájlattribútumokkal állíthatja be a Indent, IndentSize és AutoFlush tulajdonságokat. Az alábbi példa a AutoFlush tulajdonságot 3 értékre false állítja, a IndentSize tulajdonságot pedig 3 értékre.
<configuration>
<system.diagnostics>
<trace autoflush="false" indentsize="3" />
</system.diagnostics>
</configuration>
Konstruktorok
| Name | Description |
|---|---|
| TraceSource(String, SourceLevels) |
Inicializálja az TraceSource osztály új példányát a forrás megadott nevével és a nyomkövetés alapértelmezett forrásszintjén. |
| TraceSource(String) |
Inicializálja az TraceSource osztály új példányát a forrás megadott nevével. |
Tulajdonságok
| Name | Description |
|---|---|
| Attributes |
Lekéri az alkalmazáskonfigurációs fájlban definiált egyéni kapcsolóattribútumokat. |
| DefaultLevel |
Lekéri a konstruktor alapértelmezett szintjét. |
| Listeners |
Lekéri a nyomkövetési forrás nyomkövetési figyelőinek gyűjteményét. |
| Name |
Lekéri a nyomkövetési forrás nevét. |
| Switch |
Lekéri vagy beállítja a forráskapcsoló értékét. |
Metódusok
| Name | Description |
|---|---|
| Close() |
Bezárja a nyomkövetési figyelő gyűjteményében lévő összes nyomkövetési figyelőt. |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| Flush() |
Kiüríti a nyomkövetési figyelő gyűjteményében lévő összes nyomkövetési figyelőt. |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetSupportedAttributes() |
Lekéri a nyomkövetési forrás által támogatott egyéni attribútumokat. |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |
| TraceData(TraceEventType, Int32, Object) |
Nyomkövetési adatokat ír a gyűjtemény nyomkövetési figyelőinek a Listeners megadott eseménytípus, eseményazonosító és nyomkövetési adatok használatával. |
| TraceData(TraceEventType, Int32, Object[]) |
Nyomkövetési adatokat ír a gyűjtemény nyomkövetési figyelőinek a Listeners megadott eseménytípus, eseményazonosító és nyomkövetési adattömb használatával. |
| TraceEvent(TraceEventType, Int32, String, Object[]) |
Nyomkövetési eseményt ír a gyűjtemény nyomkövetési figyelőinek a Listeners megadott eseménytípus, eseményazonosító, argumentumtömb és formátum használatával. |
| TraceEvent(TraceEventType, Int32, String) |
Nyomkövetési eseményüzenetet ír a gyűjtemény nyomkövetési figyelőinek a Listeners megadott eseménytípus, eseményazonosító és üzenet használatával. |
| TraceEvent(TraceEventType, Int32) |
Nyomkövetési eseményüzenetet ír a gyűjtemény nyomkövetési figyelőinek a Listeners megadott eseménytípus és eseményazonosító használatával. |
| TraceInformation(String, Object[]) |
Tájékoztató üzenetet ír a gyűjtemény nyomkövetési figyelőinek a Listeners megadott objektumtömb és formázási információk használatával. |
| TraceInformation(String) |
Tájékoztató üzenetet ír a gyűjtemény nyomkövetési figyelőinek a Listeners megadott üzenet használatával. |
| TraceTransfer(Int32, String, Guid) |
Nyomkövetésátviteli üzenetet ír a gyűjtemény nyomkövetési figyelőinek a Listeners megadott numerikus azonosító, üzenet és kapcsolódó tevékenységazonosító használatával. |
esemény
| Name | Description |
|---|---|
| Initializing |
Akkor fordul elő, ha inicializálni kell egy TraceSource adott elemet. |
A következőre érvényes:
Szálbiztonság
Ez a típus szálbiztos.