Cómo: Crear e inicializar orígenes de seguimiento
Actualización: noviembre 2007
Los orígenes de seguimiento se pueden crear e inicializar con o sin la utilización de archivos de configuración. El enfoque recomendado consiste en utilizar archivos de configuración para facilitar la reconfiguración de las trazas producidas por los orígenes de seguimiento en tiempo de ejecución.
Para crear e inicializar un origen de seguimiento mediante un archivo de configuración
El ejemplo de código siguiente está pensado para ejecutarse junto con un archivo de configuración de la aplicación (se muestra en el paso 2). El archivo de configuración inicializa la configuración para el origen de seguimiento en el momento en que se inicializa la aplicación. La aplicación puede cambiar dinámicamente las propiedades establecidas por el archivo de configuración para reemplazar cualquier configuración especificada por el usuario. Por ejemplo, podría desear asegurar que siempre envían a los mensajes críticos a un archivo de texto, sin tener en cuenta las opciones de configuración actuales. El código de ejemplo siguiente muestra el reemplazo de los ajustes del archivo de configuración para asegurar que se entregan los mensajes críticos a los agentes de escucha de seguimiento. Cambiar los ajustes del archivo de configuración mientras la aplicación se está ejecutando no cambia la configuración inicial. Para hacerlo, se debe reiniciar la aplicación o actualizar la aplicación mediante programación utilizando el método 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."); } } }
Cree el archivo de configuración siguiente para inicializar el TraceSource de TraceSourceApp en el ejemplo de código. El archivo de configuración de una aplicación alojada por el host ejecutable está en el mismo directorio que la aplicación. El nombre del archivo de configuración es el nombre de la aplicación, con la extensión .config. Para nuestro ejemplo, TraceSourceApp.exe se puede asociar con un archivo de configuración denominado TraceSourceApp.exe.config. El ejemplo de archivo de configuración siguiente muestra cómo inicializar un agente de escucha de seguimiento de consola y un agente de seguimiento de escucha del escritor de texto para el origen de seguimiento creado en el paso anterior. Además de configurar los agentes de escucha de seguimiento, el archivo de configuración filtra por ambos agentes de escucha y crea un modificador de origen para el origen de seguimiento. Para agregar agentes de escucha de seguimiento se muestran dos técnicas: agregar directamente el agente de escucha al origen de seguimiento y agregar un agente de escucha a la colección de agentes compartidos y después agregarlo por su nombre al origen de seguimiento. Los filtros identificados para los dos agentes de escucha se inicializan con niveles de origen diferentes. Esto tiene como resultado que algunos mensajes se escriban mediante sólo uno de los dos agentes de escucha.
<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>
Para inicializar orígenes de seguimiento, agentes de escucha y filtros sin archivo de configuración
Puede instrumentar el seguimiento a través de un origen de seguimiento totalmente a través de código sin utilizar un archivo de configuración. No es una práctica recomendada, pero puede haber circunstancias en las que no desea depender de archivos de configuración para garantizar el seguimiento.
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."); } } }