Procédure : Créer et initialiser des sources de trace
Remarque
Cet article est spécifique au .NET Framework. Ceci ne s’applique pas aux implémentations plus récentes de .NET, y compris .NET 6 et ultérieur.
La classe TraceSource est utilisée par les applications pour produire des traces qui peuvent être associées à l'application. TraceSource fournit des méthodes de traçage qui vous permettent de tracer facilement des événements et des données, ainsi que de fournir des traces d'information. Il est possible de créer et d'initialiser une sortie de trace TraceSource en utilisant ou non les fichiers de configuration. Cette rubrique fournit des instructions pour les deux options. Toutefois, nous vous recommandons 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
Créez un projet d’application console Visual Studio (.NET Framework) et remplacez le code fourni par le code suivant. Ce code consigne les erreurs et les avertissements et renvoie certains d'entre eux vers la console et d'autres vers le fichier myListener créé par les entrées dans le fichier de configuration.
using System; using System.Diagnostics; class TraceTest { private static TraceSource mySource = new TraceSource("TraceSourceApp"); static void Main(string[] args) { // Issue an error and a warning message. Only the error message // should be logged. Activity1(); // Save the original settings from the configuration file. EventTypeFilter configFilter = (EventTypeFilter)mySource.Listeners["console"].Filter; // Create a new event type filter that ensures // warning messages will be written. mySource.Listeners["console"].Filter = new EventTypeFilter(SourceLevels.Warning); // Allow the trace source to send messages to listeners // for all event types. This statement will override // any settings in the configuration file. // If you do not change the switch level, the event filter // changes have no effect. mySource.Switch.Level = SourceLevels.All; // Issue a warning and a critical message. Both should be logged. Activity2(); // 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.TraceEvent(TraceEventType.Warning, 2, "Warning message."); } static void Activity3() { mySource.TraceEvent(TraceEventType.Error, 4, "Error message."); mySource.TraceInformation("Informational message."); } }
Imports System.Diagnostics Class TraceTest Private Shared mySource As New TraceSource("TraceSourceApp") Shared Sub Main(ByVal args() As String) ' Issue an error and a warning message. Only the error message ' should be logged. Activity1() ' Save the original settings from the configuration file. Dim configFilter As EventTypeFilter = CType(mySource.Listeners("console").Filter, EventTypeFilter) ' Create a new event type filter that ensures ' warning messages will be written. mySource.Listeners("console").Filter = New EventTypeFilter(SourceLevels.Warning) ' Allow the trace source to send messages to listeners ' for all event types. This statement will override ' any settings in the configuration file. ' If you do not change the switch level, the event filter ' changes have no effect. mySource.Switch.Level = SourceLevels.All ' Issue a warning and a critical message. Both should be logged. Activity2() ' Restore the original filter settings. mySource.Listeners("console").Filter = configFilter Activity3() mySource.Close() Return End Sub Shared Sub Activity1() mySource.TraceEvent(TraceEventType.Error, 1, "Error message.") mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message.") End Sub Shared Sub Activity2() mySource.TraceEvent(TraceEventType.Critical, 3, "Critical message.") mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message.") End Sub Shared Sub Activity3() mySource.TraceEvent(TraceEventType.Error, 4, "Error message.") mySource.TraceInformation("Informational message.") End Sub End Class
Ajoutez un fichier de configuration d'application, s'il n'en existe pas encore, au projet pour initialiser la source de trace nommée
TraceSourceApp
dans l'exemple de code à l'étape 1.Remplacez le contenu du fichier de configuration par défaut par les paramètres suivants pour initialiser un écouteur de suivi de console et un écouteur de suivi de TextWriter pour la source de trace créée à l'étape 1.
<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="Error"/> </add> <add name="myListener"/> <remove name="Default"/> </listeners> </source> </sources> <switches> <add name="sourceSwitch" value="Error"/> </switches> <sharedListeners> <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="myListener.log"> <filter type="System.Diagnostics.EventTypeFilter" initializeData="Error"/> </add> </sharedListeners> </system.diagnostics> </configuration>
En plus de configurer les écouteurs de la trace, le fichier de configuration crée des filtres pour les deux écouteurs et 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.
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 actuelle. L'exemple de code montre comment remplacer des paramètres du fichier de configuration pour garantir que les messages critiques sont envoyés aux écouteurs de suivi.
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 modifier les paramètres, vous devez redémarrer l'application ou l'actualiser par programmation à l'aide de la méthode Trace.Refresh.
Pour initialiser des sources de trace, des écouteurs et des filtres sans fichier de configuration
Utilisez le code d'exemple suivant pour activer le traçage par une source de trace sans utiliser un fichier de configuration. Il ne s'agit pas d'une pratique recommandée, mais il peut arriver que vous ne souhaitiez pas dépendre des fichiers de configuration pour assurer 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(); // Allow the trace source to send messages to // listeners for all event types. Currently only // error messages or higher go to the listeners. // Messages must get past the source switch to // get to the listeners, regardless of the settings // for the listeners. mySource.Switch.Level = SourceLevels.All; // Set the filter settings for the // console trace listener. mySource.Listeners["console"].Filter = new EventTypeFilter(SourceLevels.Critical); Activity2(); // 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."); } } }
Imports System.Diagnostics Imports System.Threading Class Program Private Shared mySource As New TraceSource("TraceSourceApp") Shared Sub Main(ByVal args() As String) mySource.Switch = New SourceSwitch("sourceSwitch", "Error") mySource.Listeners.Remove("Default") Dim textListener As New TextWriterTraceListener("myListener.log") Dim console As 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() ' Allow the trace source to send messages to ' listeners for all event types. Currently only ' error messages or higher go to the listeners. ' Messages must get past the source switch to ' get to the listeners, regardless of the settings ' for the listeners. mySource.Switch.Level = SourceLevels.All ' Set the filter settings for the ' console trace listener. mySource.Listeners("console").Filter = New EventTypeFilter(SourceLevels.Critical) Activity2() ' Change the filter settings for the console trace listener. mySource.Listeners("console").Filter = New EventTypeFilter(SourceLevels.Information) Activity3() mySource.Close() Return End Sub Shared Sub Activity1() mySource.TraceEvent(TraceEventType.Error, 1, "Error message.") mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message.") End Sub Shared Sub Activity2() mySource.TraceEvent(TraceEventType.Critical, 3, "Critical message.") mySource.TraceInformation("Informational message.") End Sub Shared Sub Activity3() mySource.TraceEvent(TraceEventType.Error, 4, "Error message.") mySource.TraceInformation("Informational message.") End Sub End Class