Procedimiento para usar TraceSource y filtros con agentes de escucha de seguimiento

Una de las nuevas características de la versión 2.0 de .NET Framework es un sistema de seguimiento mejorado. La idea básica no se ha modificado: se envían mensajes de seguimiento a través de conmutadores a agentes de escucha, que notifican los datos a un medio de salida asociado. Una diferencia principal de la versión 2.0 es que los seguimientos se pueden iniciar a través de instancias de la clase TraceSource. TraceSource está pensada para funcionar como un sistema de seguimiento mejorado y se puede usar en lugar de los métodos estáticos de las clases anteriores de seguimiento Trace y Debug. Las clases Trace y Debug conocidas siguen existiendo, pero la práctica recomendada es usar la clase TraceSource para realizar el seguimiento.

En este tema se describe el uso de TraceSource junto con un archivo de configuración de aplicación. Es posible, aunque no aconsejable, realizar el seguimiento mediante TraceSource sin el uso de un archivo de configuración. Para obtener información sobre el seguimiento sin un archivo de configuración, vea Cómo: Crear e inicializar orígenes de seguimiento.

Para crear e inicializar el origen de seguimiento

  1. El primer paso para instrumentar una aplicación con el seguimiento es crear un origen de seguimiento. En proyectos grandes con diversos componentes, puede crear un origen de seguimiento independiente para cada componente. La práctica recomendada es usar el nombre de la aplicación para el nombre del origen de seguimiento. Así resultará más fácil separar los distintos seguimientos. En el código siguiente se crea un nuevo origen de seguimiento (mySource)) y se llama a un método (Activity1) que realiza el seguimiento de eventos. El agente de escucha de seguimiento predeterminado escribe los mensajes de 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)  
            {  
                Activity1();  
                mySource.Close();  
                return;  
            }  
            static void Activity1()  
            {  
                mySource.TraceEvent(TraceEventType.Error, 1,
                    "Error message.");  
                mySource.TraceEvent(TraceEventType.Warning, 2,
                    "Warning message.");  
            }  
        }  
    }  
    

Para crear e inicializar agentes de escucha de seguimiento y filtros

  1. El código en el primer procedimiento no identifica mediante programación ningún agente de escucha de seguimiento ni ningún filtro. El resultado del código es que los mensajes de seguimiento se escriben en el agente de escucha de seguimiento predeterminado. Para configurar agentes de escucha de seguimiento específicos y sus filtros asociados, edite el archivo de configuración que se corresponde con el nombre de la aplicación. En este archivo, puede agregar o quitar un agente de escucha, establecer las propiedades y el filtro para un agente de escucha o quitar agentes de escucha. En el siguiente archivo de configuración de ejemplo se muestra cómo inicializar un agente de escucha de seguimiento de consola y un agente de escucha de seguimiento de escritor de texto para el origen de seguimiento creado en el procedimiento anterior. Además de configurar los agentes de escucha de seguimiento, el archivo de configuración crea filtros para ambos agentes de escucha y un modificador de origen para el origen de seguimiento. Para agregar agentes de escucha de traza se muestran dos técnicas: agregar directamente el agente de escucha al origen de traza y agregar un agente de escucha a la colección de agentes compartidos y después agregarlo por su nombre al origen de traza. 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 solo 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 cambiar el nivel en el que un agente de escucha escribe un mensaje de seguimiento

  1. El archivo de configuración inicializa la configuración para el origen de traza en el momento en que se inicializa la aplicación. Para cambiar esa configuración, debe cambiar el archivo de configuración y reiniciar la aplicación, o actualizarla mediante programación usando el método Trace.Refresh. 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, es posible que quiera asegurarse de que los mensajes críticos siempre se envíen a un archivo de texto, independientemente de las opciones de configuración actuales.

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

Consulte también