Cómo: Utilizar TraceSource y filtros con agentes de escucha de seguimiento

Actualización: noviembre 2007

Una de las nuevas características incluidas en la versión 2.0 de .NET Framework es un sistema del seguimiento mejorado. La premisa básica no se ha modificado: se envían mensajes de seguimiento a los agentes de escucha a través de los modificadores, que proporcionan los datos a un medio de salida asociado. Una de las principales diferencias de la versión 2.0 es que los seguimientos se pueden iniciar a través de instancias de la clase TraceSource. TraceSource está pensado para funcionar como un sistema de seguimiento mejorado y se pueden usar en lugar de los métodos estáticos de las anteriores clases de seguimiento Trace y Debug. Las conocidas clases Trace y Debug todavía existen, pero la práctica recomendada es utilizar la clase TraceSource para realizar el seguimiento.

En este tema se describe el uso de un TraceSource acoplado con un archivo de configuración de la aplicación. Es posible, aunque no se recomienda, realizar el seguimiento utilizando un TraceSource sin usar un archivo de configuración. Para obtener más información acerca de cómo realizar el seguimiento sin un archivo de configuración, vea Cómo: Crear e inicializar orígenes de seguimiento.

Para crear e inicializar su origen de seguimiento

  • El primer paso para instrumentar una aplicación con seguimiento consiste en 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 utilizar el nombre de aplicación para el nombre del origen de seguimiento. Así resultará más fácil mantener independientes los distintos seguimientos. El código siguiente crea un nuevo origen de seguimiento (mySource)) y llama a un método (Activity1) que efectúa el seguimiento de los 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.");
            }
        }
    }
    

Crear e inicializar agentes de escucha de seguimiento y filtros

  • El código del primer procedimiento no identifica mediante programación ningún agente de escucha de seguimiento ni ningún filtro. Por sí solo, el código produce el seguimiento de los mensajes de seguimiento que 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 corresponde al nombre de su aplicación. En este archivo, puede agregar o quitar un agente de escucha, establecer las propiedades y filtrar por agente de escucha o quitar dichos agentes. El siguiente ejemplo de archivo de configuración muestra cómo inicializar un agente de escucha de seguimiento de la consola y un agente de escucha de seguimiento de escritor de texto para el origen de seguimiento que se crea en el procedimiento 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 cambiar el nivel en el que un agente de escucha escribe un mensaje de seguimiento

  • El archivo de configuración inicializa la configuración para el origen de seguimiento 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 actualizar mediante programación la aplicación a través del 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, 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.

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

Vea también

Tareas

Cómo: Crear e inicializar orígenes de seguimiento

Conceptos

Agentes de escucha de seguimiento

Referencia

TraceSource

TextWriterTraceListener

ConsoleTraceListener

EventTypeFilter