TraceSource Klas

Definitie

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.

Zie ook