Dela via


Anvisningar: Använda TraceSource och filter med spårningslyssnare

Kommentar

Den här artikeln är specifik för .NET Framework. Det gäller inte för nyare implementeringar av .NET, inklusive .NET 6 och senare versioner.

En av de nya funktionerna i .NET Framework version 2.0 är ett förbättrat spårningssystem. Den grundläggande premissen är oförändrad: spårningsmeddelanden skickas via växlar till lyssnare, som rapporterar data till ett associerat utdatamedium. En primär skillnad för version 2.0 är att spårningar kan initieras via instanser av TraceSource klassen. TraceSource är avsett att fungera som ett förbättrat spårningssystem och kan användas i stället för de statiska metoderna i de äldre Trace klasserna och Debug spårningsklasserna. De välbekanta Trace klasserna och Debug finns fortfarande, men den rekommenderade metoden är att använda TraceSource klassen för spårning.

I det här avsnittet beskrivs användningen av en TraceSource kombination med en programkonfigurationsfil. Det är möjligt, även om det inte rekommenderas, att spåra med hjälp av en TraceSource utan att använda en konfigurationsfil. Information om spårning utan en konfigurationsfil finns i Så här skapar och initierar du spårningskällor.

Skapa och initiera spårningskällan

  1. Det första steget för att instrumentera ett program med spårning är att skapa en spårningskälla. I stora projekt med olika komponenter kan du skapa en separat spårningskälla för varje komponent. Den rekommenderade metoden är att använda programnamnet för spårningskällans namn. Detta gör det enklare att hålla de olika spårningarna åtskilda. Följande kod skapar en ny spårningskälla (mySource) och anropar en metod (Activity1) som spårar händelser. Spårningsmeddelandena skrivs av standardspårningslyssnaren.

    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.");
            }
        }
    }
    

Skapa och initiera spårningslyssnare och filter

  1. Koden i den första proceduren identifierar inte programmatiskt några spårningslyssnare eller filter. Enbart koden resulterar i att spårningsmeddelanden skrivs till standardspårningslyssnaren. Om du vill konfigurera specifika spårningslyssnare och tillhörande filter redigerar du konfigurationsfilen som motsvarar namnet på ditt program. I den här filen kan du lägga till eller ta bort en lyssnare, ange egenskaper och filtrera efter en lyssnare eller ta bort lyssnare. Följande konfigurationsfilexempel visar hur du initierar en konsolspårningslyssnare och en spårningslyssnare för den spårningskälla som skapades i föregående procedur. Förutom att konfigurera spårningslyssnare skapar konfigurationsfilen filter för båda lyssnarna och skapar en källväxel för spårningskällan. Två tekniker visas för att lägga till spårningslyssnare: lägga till lyssnaren direkt till spårningskällan och lägga till en lyssnare i samlingen delade lyssnare och sedan lägga till den med namn i spårningskällan. Filtren som identifieras för de två lyssnarna initieras med olika källnivåer. Detta resulterar i att vissa meddelanden skrivs av endast en av de två lyssnarna.

    <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>
    

Så här ändrar du nivån där en lyssnare skriver ett spårningsmeddelande

  1. Konfigurationsfilen initierar inställningarna för spårningskällan när programmet initieras. Om du vill ändra inställningarna måste du ändra konfigurationsfilen och starta om programmet eller programmatiskt uppdatera programmet med hjälp av Trace.Refresh -metoden. Programmet kan dynamiskt ändra de egenskaper som anges av konfigurationsfilen för att åsidosätta de inställningar som anges av användaren. Du kanske till exempel vill försäkra dig om att kritiska meddelanden alltid skickas till en textfil, oavsett de aktuella konfigurationsinställningarna.

    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.");
            }
        }
    }
    

Se även