Delen via


Procedure: TraceSource en filters gebruiken met Trace Listeners

Notitie

Dit artikel is specifiek voor .NET Framework. Dit geldt niet voor nieuwere implementaties van .NET, waaronder .NET 6 en nieuwere versies.

Een van de nieuwe functies in .NET Framework versie 2.0 is een uitgebreid traceringssysteem. De basisinstelling is ongewijzigd: traceringsberichten worden verzonden via switches naar listeners, die de gegevens rapporteren aan een gekoppeld uitvoermedium. Een belangrijk verschil voor versie 2.0 is dat traceringen kunnen worden gestart via exemplaren van de TraceSource klasse. TraceSource is bedoeld om te functioneren als een verbeterd traceringssysteem en kan worden gebruikt in plaats van de statische methoden van de oudere Trace klassen en Debug traceringsklassen. De vertrouwde Trace en Debug klassen bestaan nog steeds, maar de aanbevolen procedure is om de TraceSource klasse te gebruiken voor tracering.

In dit onderwerp wordt het gebruik van een TraceSource toepassingsconfiguratiebestand beschreven. Het is mogelijk, hoewel niet aanbevolen, om te traceren met behulp van een TraceSource configuratiebestand zonder het gebruik van een configuratiebestand. Zie Instructies voor het maken en initialiseren van traceringsbronnen voor informatie over tracering zonder een configuratiebestand.

Uw traceringsbron maken en initialiseren

  1. De eerste stap bij het instrumenteren van een toepassing met tracering is het maken van een traceringsbron. In grote projecten met verschillende onderdelen kunt u voor elk onderdeel een afzonderlijke traceringsbron maken. De aanbevolen procedure is om de toepassingsnaam te gebruiken voor de traceringsbronnaam. Hierdoor is het eenvoudiger om de verschillende traceringen gescheiden te houden. Met de volgende code wordt een nieuwe traceringsbron gemaakt (mySource) en wordt een methode (Activity1) aangeroepen die gebeurtenissen traceert. De traceringsberichten worden geschreven door de standaardtraceringslistener.

    using System;
    using System.Diagnostics;
    using System.Threading;
    
    namespace TraceSourceApp
    {
        class Program
        {
            private static TraceSource mySource =
                new TraceSource("TraceSourceApp");
            static void Main(string[] args)
            {
                Activity1();
                mySource.Close();
                return;
            }
            static void Activity1()
            {
                mySource.TraceEvent(TraceEventType.Error, 1,
                    "Error message.");
                mySource.TraceEvent(TraceEventType.Warning, 2,
                    "Warning message.");
            }
        }
    }
    

Traceerlisteners en -filters maken en initialiseren

  1. De code in de eerste procedure identificeert geen traceringslisteners of filters programmatisch. De code alleen resulteert in de traceringsberichten die naar de standaardtraceerlistener worden geschreven. Als u specifieke traceerlisteners en de bijbehorende filters wilt configureren, bewerkt u het configuratiebestand dat overeenkomt met de naam van uw toepassing. In dit bestand kunt u een listener toevoegen of verwijderen, de eigenschappen instellen en filteren op een listener of listeners verwijderen. In het volgende voorbeeld van een configuratiebestand ziet u hoe u een consoletraceringslistener en een listener voor tekstschrijvers initialiseert voor de traceringsbron die in de voorgaande procedure is gemaakt. Naast het configureren van de traceerlisteners, maakt het configuratiebestand filters voor beide listeners en maakt het een bronswitch voor de traceringsbron. Er worden twee technieken weergegeven voor het toevoegen van traceerlisteners: de listener rechtstreeks toevoegen aan de traceringsbron en een listener toevoegen aan de verzameling gedeelde listeners en deze vervolgens op naam toevoegen aan de traceringsbron. De filters die voor de twee listeners worden geïdentificeerd, worden geïnitialiseerd met verschillende bronniveaus. Dit resulteert in een aantal berichten die slechts door een van de twee listeners worden geschreven.

    <configuration>
      <system.diagnostics>
        <sources>
          <source name="TraceSourceApp"
            switchName="sourceSwitch"
            switchType="System.Diagnostics.SourceSwitch">
            <listeners>
              <add name="console"
                type="System.Diagnostics.ConsoleTraceListener">
                <filter type="System.Diagnostics.EventTypeFilter"
                  initializeData="Warning"/>
              </add>
              <add name="myListener"/>
              <remove name="Default"/>
            </listeners>
          </source>
        </sources>
        <switches>
          <add name="sourceSwitch" value="Warning"/>
        </switches>
        <sharedListeners>
          <add name="myListener"
            type="System.Diagnostics.TextWriterTraceListener"
            initializeData="myListener.log">
            <filter type="System.Diagnostics.EventTypeFilter"
              initializeData="Error"/>
          </add>
        </sharedListeners>
      </system.diagnostics>
    </configuration>
    

Het niveau wijzigen waarop een listener een traceringsbericht schrijft

  1. Het configuratiebestand initialiseert de instellingen voor de traceringsbron op het moment dat de toepassing wordt geïnitialiseerd. Als u deze instellingen wilt wijzigen, moet u het configuratiebestand wijzigen en de toepassing opnieuw starten of de toepassing programmatisch vernieuwen met behulp van de Trace.Refresh methode. De toepassing kan de eigenschappen die door het configuratiebestand zijn ingesteld, dynamisch wijzigen om instellingen te overschrijven die door de gebruiker zijn opgegeven. U wilt er bijvoorbeeld voor zorgen dat kritieke berichten altijd naar een tekstbestand worden verzonden, ongeacht de huidige configuratie-instellingen.

    using System;
    using System.Diagnostics;
    using System.Threading;
    
    namespace TraceSourceApp
    {
        class Program
        {
            private static TraceSource mySource =
                new TraceSource("TraceSourceApp");
            static void Main(string[] args)
            {
                Activity1();
    
                // Change the event type for which tracing occurs.
                // The console trace listener must be specified
                // in the configuration file. First, save the original
                // settings from the configuration file.
                EventTypeFilter configFilter =
                    (EventTypeFilter)mySource.Listeners["console"].Filter;
    
                // Then create a new event type filter that ensures
                // critical messages will be written.
                mySource.Listeners["console"].Filter =
                    new EventTypeFilter(SourceLevels.Critical);
                Activity2();
    
                // Allow the trace source to send messages to listeners
                // for all event types. This statement will override
                // any settings in the configuration file.
                mySource.Switch.Level = SourceLevels.All;
    
                // Restore the original filter settings.
                mySource.Listeners["console"].Filter = configFilter;
                Activity3();
                mySource.Close();
                return;
            }
            static void Activity1()
            {
                mySource.TraceEvent(TraceEventType.Error, 1,
                    "Error message.");
                mySource.TraceEvent(TraceEventType.Warning, 2,
                    "Warning message.");
            }
            static void Activity2()
            {
                mySource.TraceEvent(TraceEventType.Critical, 3,
                    "Critical message.");
                mySource.TraceInformation("Informational message.");
            }
            static void Activity3()
            {
                mySource.TraceEvent(TraceEventType.Error, 4,
                    "Error message.");
                mySource.TraceInformation("Informational message.");
            }
        }
    }
    

Zie ook