Partager via


Comment : créer et initialiser les sources de trace

Mise à jour : novembre 2007

Il est possible de créer ou d'initialiser des sources de trace avec ou sans fichier de configuration. Il est toutefois recommandé d'utiliser des fichiers de configuration pour simplifier la reconfiguration des traces produites par les sources de trace au moment de l'exécution.

Pour créer et initialiser une source de trace à l'aide d'un fichier de configuration

  1. L'exemple de code suivant est prévu pour être exécuté conjointement avec un fichier de configuration de l'application (illustré dans l'étape 2). Le fichier de configuration initialise les paramètres de la source de trace lors de l'initialisation de l'application. L'application peut modifier dynamiquement les propriétés définies par le fichier de configuration pour substituer des paramètres spécifiés par l'utilisateur. Vous pouvez, par exemple, décider que les messages critiques seront toujours envoyés vers un fichier texte, quels que soient les paramètres de configuration actuels. L'exemple de code suivant illustre la substitution des paramètres du fichier de configuration pour garantir la sortie des messages critiques vers les écouteurs de la trace. La modification des paramètres du fichier de configuration lorsque l'application est en cours d'exécution ne change pas les paramètres d'origine. Pour ce faire, vous devez redémarrer l'application ou actualiser par programme l'application à l'aide de la méthode Refresh.

    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.");
            }
        }
    }
    
  2. Créez le fichier de configuration suivant pour initialiser TraceSourceTraceSourceApp dans l'exemple de code. Le fichier de configuration d'une application hébergée par l'hôte exécutable se situe dans le même répertoire que l'application. Le nom du fichier de configuration est le nom de l'application assorti d'une extension .config. Pour les besoins de cet exemple, TraceSourceApp.exe peut être associé à un fichier de configuration appelé TraceSourceApp.exe.config. L'exemple de fichier de configuration suivant montre comment initialiser un écouteur de la trace de console et un écouteur de la trace du writer du texte pour la source de trace créée à l'étape précédente. En plus de configurer les écouteurs de la trace, le fichier de configuration crée des filtres pour les deux écouteurs et crée un commutateur de source pour la source de trace. L'exemple illustre deux techniques pour ajouter des écouteurs de la trace : l'ajout direct de l'écouteur à la source de trace et l'ajout d'un écouteur à la collection d'écouteurs partagés suivi de l'ajout de son nom à la source de trace. Les filtres identifiés pour les deux écouteurs sont initialisés avec des niveaux de source différents. Par conséquent, certains messages ne sont écrits que par un seul des deux écouteurs.

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

Pour initialiser des sources de trace, des écouteurs et des filtres sans fichier de configuration

  • Vous pouvez instrumenter le traçage via une source de trace uniquement dans le code, sans utiliser de fichier de configuration. Il ne s'agit pas de la méthode recommandée mais il peut arriver dans certains cas que vous ne souhaitiez pas dépendre des fichiers de configuration pour garantir le traçage.

    using System;
    using System.Diagnostics;
    using System.Threading;
    
    namespace TraceSourceApp
    {
        class Program
        {
            private static TraceSource mySource =
                new TraceSource("TraceSourceApp");
            static void Main(string[] args)
            {
                mySource.Switch = new SourceSwitch("sourceSwitch", "Error");
                mySource.Listeners.Remove("Default");
                TextWriterTraceListener textListener =
                    new TextWriterTraceListener("myListener.log");
                ConsoleTraceListener console =
                    new ConsoleTraceListener(false);
                console.Filter =
                    new EventTypeFilter(SourceLevels.Information);
                console.Name = "console";
                textListener.Filter =
                    new EventTypeFilter(SourceLevels.Error);
                mySource.Listeners.Add(console);
                mySource.Listeners.Add(textListener);
                Activity1();
    
                // Set the filter settings for the 
                // console trace listener.
                mySource.Listeners["console"].Filter =
                    new EventTypeFilter(SourceLevels.Critical);
                Activity2();
    
                // Allow the trace source to send messages to 
                // listeners for all event types. 
                mySource.Switch.Level = SourceLevels.All;
    
                // Change the filter settings for the console trace listener.
                mySource.Listeners["console"].Filter =
                    new EventTypeFilter(SourceLevels.Information);
                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.");
            }
        }
    }
    

Voir aussi

Référence

TraceSource

TextWriterTraceListener

ConsoleTraceListener

EventTypeFilter

Autres ressources

Traçage et instrumentation d'applications