Exportar (0) Imprimir
Expandir todo

TraceSource (Clase)

Actualización: noviembre 2007

Proporciona un conjunto de métodos y propiedades que permiten a las aplicaciones realizar un seguimiento de la ejecución de código y asociar los mensajes de seguimiento a su origen.

Espacio de nombres:  System.Diagnostics
Ensamblado:  System (en System.dll)

public class TraceSource
public class TraceSource
public class TraceSource

Las aplicaciones utilizan la clase TraceSource para realizar seguimientos que se pueden asociar a la aplicación. TraceSource proporciona métodos de seguimiento que permiten realizar fácilmente un seguimiento de los eventos y datos, además de emitir seguimientos informativos. Los resultados de seguimiento de TraceSource se pueden controlar mediante el archivo de configuración. Este archivo está ubicado en la carpeta que contiene el ejecutable de la aplicación y tiene el nombre de la aplicación con la extensión .config. Por ejemplo, el nombre del archivo de configuración de TraceSourceSample.exe es TraceSourceSample.exe.config. El archivo de configuración se puede utilizar para determinar adónde se va a enviar la información de seguimiento y de qué niveles de actividad se va a realizar un seguimiento. En el ejemplo siguiente se muestra el contenido de un archivo de configuración de aplicación de ejemplo.

<configuration>
  <system.diagnostics>
    <sources>
      <source name="TraceTest" switchName="SourceSwitch" 
        switchType="System.Diagnostics.SourceSwitch" >
        <listeners>
          <add name="console" />
          <remove name ="Default" />
        </listeners>
      </source>
    </sources>
    <switches>
      <!-- You can set the level at which tracing is to occur -->
      <add name="SourceSwitch" value="Warning" />
        <!-- You can turn tracing off -->
        <!--add name="SourceSwitch" value="Off" -->
    </switches>
    <sharedListeners>
      <add name="console" 
        type="System.Diagnostics.ConsoleTraceListener" 
        initializeData="false"/>
    </sharedListeners>
    <trace autoflush="true" indentsize="4">
      <listeners>
        <add name="console" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

La clase TraceSource viene identificada por el nombre de un origen, que suele ser el nombre de la aplicación. Los mensajes de seguimiento procedentes de un componente determinado los puede iniciar un origen de seguimiento específico, lo que permite que todos los mensajes procedentes de ese componente puedan identificarse con facilidad.

TraceSource define los métodos de seguimiento pero, en realidad, no proporciona ningún mecanismo concreto para generar y almacenar los datos de seguimiento. Los datos de seguimiento los generan los agentes de escucha de seguimiento, que son complementos que pueden cargar los orígenes de seguimiento.

hd7z6as6.alert_note(es-es,VS.90).gifNota:

No se debe llamar a los métodos de traza durante la finalización. Esta acción puede hacer que se produzca una excepción ObjectDisposedException.

Para personalizar el destino de los resultados de seguimiento, agregue o quite instancias de TraceListener de la colección almacenada en la propiedad TraceSource.Listeners. De manera predeterminada, los resultados de seguimiento se generan utilizando una instancia de la clase DefaultTraceListener. En el anterior ejemplo de archivo de configuración se muestra cómo quitar el DefaultTraceListener y agregar un ConsoleTraceListener para generar los resultados de seguimiento para el origen de seguimiento. Para obtener más información, vea Elemento <listeners> de <source> y <sharedListeners> (Elemento).

La clase SourceSwitch proporciona los medios para controlar de forma dinámica los resultados de seguimiento. En el anterior ejemplo de archivo de configuración se muestra cómo se puede desactivar el seguimiento de un origen de seguimiento y controlar el nivel en el que se produce el seguimiento. Se puede modificar el valor del modificador de origen sin tener que volver a compilar la aplicación. Para obtener información sobre cómo utilizar el archivo de configuración para establecer un modificador, vea Switch y Cómo: Configurar modificadores de seguimiento.

hd7z6as6.alert_note(es-es,VS.90).gifNota:

Si se modifica un archivo de configuración durante la ejecución de una aplicación, es preciso detener la aplicación e reiniciarla, o bien, llamar al método Refresh para que surta efecto la nueva configuración.

La enumeración TraceEventType se utiliza para definir el tipo de evento del mensaje de seguimiento. Los filtros de seguimiento utilizan TraceEventType para determinar si un agente de escucha de seguimiento debe generar el mensaje de seguimiento.

Los agentes de escucha de seguimiento pueden tener opcionalmente una capa adicional de filtrado a través de un filtro de seguimiento. Si un agente de escucha de seguimiento tiene un filtro asociado, el agente de escucha llama al método ShouldTrace en ese filtro para determinar si debe generar la información de seguimiento.

Los agentes de escucha de seguimiento utilizan los valores de las propiedades Indent, IndentSize y AutoFlush de la clase Trace para dar formato a los resultados de seguimiento. Los atributos del archivo de configuración se pueden utilizar para establecer el valor de las propiedades Indent, IndentSize y AutoFlush. En el ejemplo siguiente se establece el valor de la propiedad AutoFlush en false y el valor de la propiedad IndentSize en 3.

<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="3" />
  </system.diagnostics>
</configuration>

En el ejemplo de código siguiente se muestra el uso de la clase TraceSource para enviar seguimientos a los agentes de escucha. También se muestra el uso de los modificadores y filtros.

// The following configuration file can be used with this sample.
// When using a configuration file #define ConfigFile.
//<configuration>
//    <system.diagnostics>
//        <sources>
//            <source name="TraceTest" switchName="SourceSwitch" switchType="System.Diagnostics.SourceSwitch" >
//                <listeners>
//                    <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" />
//                    <remove name ="Default" />
//                </listeners>
//            </source>
//        </sources>
//        <switches>
//            <!-- You can set the level at which tracing is to occur -->
//            <add name="SourceSwitch" value="Warning" />
//            <!-- You can turn tracing off -->
//            <!--add name="SourceSwitch" value="Off" -->
//        </switches>
//        <trace autoflush="true" indentsize="4"></trace>
//    </system.diagnostics>
//</configuration>
#define TRACE
//#define ConfigFile

using System;
using System.Collections;
using System.Diagnostics;
using System.Reflection;
using System.IO;
using System.Security.Permissions;

namespace Testing
{
    class TraceTest
    {
        // Initialize the trace source.
        static TraceSource ts = new TraceSource("TraceTest");
        [SwitchAttribute("SourceSwitch", typeof(SourceSwitch))]
        static void Main()
        {
            try
            {
                // Initialize trace switches.
#if(!ConfigFile)
                SourceSwitch sourceSwitch = new SourceSwitch("SourceSwitch", "Verbose");
                int idxConsole = ts.Listeners.Add(new System.Diagnostics.ConsoleTraceListener());
                ts.Listeners[idxConsole].Name = "console";
#endif
                DisplayProperties(ts);
                ts.Listeners["console"].TraceOutputOptions |= TraceOptions.Callstack;
                ts.TraceEvent(TraceEventType.Warning, 1);
                ts.Listeners["console"].TraceOutputOptions = TraceOptions.DateTime;
                // Issue file not found message as a warning.
                ts.TraceEvent(TraceEventType.Warning, 2, "File Test not found");
                // Issue file not found message as a verbose event using a formatted string.
                ts.TraceEvent(TraceEventType.Verbose, 3, "File {0} not found.", "test");
                // Issue file not found message as information.
                ts.TraceInformation("File {0} not found.", "test");
                ts.Listeners["console"].TraceOutputOptions |= TraceOptions.LogicalOperationStack;
                // Issue file not found message as an error event.
                ts.TraceEvent(TraceEventType.Error, 4, "File {0} not found.", "test");
                // Test the filter on the ConsoleTraceListener.
                ts.Listeners["console"].Filter = new SourceFilter("No match");
                ts.TraceData(TraceEventType.Error, 5,
                    "SourceFilter should reject this message for the console trace listener.");
                ts.Listeners["console"].Filter = new SourceFilter("TraceTest");
                ts.TraceData(TraceEventType.Error, 6,
                    "SourceFilter should let this message through on the console trace listener.");
                ts.Listeners["console"].Filter = null;
                // Use the TraceData method. 
                ts.TraceData(TraceEventType.Warning, 7, new object());
                ts.TraceData(TraceEventType.Warning, 8, new object[] { "Message 1", "Message 2" });
                // Activity tests.
                ts.TraceEvent(TraceEventType.Start, 9, "Will not appear until the switch is changed.");
                ts.Switch.Level = SourceLevels.ActivityTracing | SourceLevels.Critical;
                ts.TraceEvent(TraceEventType.Suspend, 10, "Switch includes ActivityTracing, this should appear");
                ts.TraceEvent(TraceEventType.Critical, 11, "Switch includes Critical, this should appear");
                ts.Flush();
                ts.Close();
                Console.WriteLine("Press any key to exit.");
                Console.Read();
            }
            catch (Exception e)
            {
                // Catch any unexpected exception.
                Console.WriteLine("Unexpected exception: " + e.ToString());
                Console.Read();
            }
        }
        public static void DisplayProperties(TraceSource ts)
        {
            Console.WriteLine("SourceSwitch name = " + ts.Name);
            Console.WriteLine("TraceSource switch level = " + ts.Switch.Level);
            Console.WriteLine("TraceSource switch = " + ts.Switch.DisplayName);
            SwitchAttribute[] switches = SwitchAttribute.GetAll(Assembly.GetExecutingAssembly());
            for (int i = 0; i < switches.Length; i++)
            {
                Console.WriteLine("Switch name = " + switches[i].SwitchName);
                Console.WriteLine("Switch type = " + switches[i].SwitchType);
            }
#if(ConfigFile)
            // Get the custom attributes for the TraceSource.
            Console.WriteLine("Number of custom trace source attributes = "
                + ts.Attributes.Count);
            foreach (DictionaryEntry de in ts.Attributes)
                Console.WriteLine("Custom trace source attribute = "
                    + de.Key + "  " + de.Value);
            // Get the custom attributes for the trace source switch.
            foreach (DictionaryEntry de in ts.Switch.Attributes)
                Console.WriteLine("Custom switch attribute = "
                    + de.Key + "  " + de.Value);
#endif
            Console.WriteLine("Number of listeners = " + ts.Listeners.Count);
            foreach (TraceListener traceListener in ts.Listeners)
            {
                Console.Write("TraceListener: " + traceListener.Name + "\t");
                // The following output can be used to update the configuration file.
                Console.WriteLine("AssemblyQualifiedName = " +
                    (traceListener.GetType().AssemblyQualifiedName));
            }
        }
    }
}


System.Object
  System.Diagnostics.TraceSource

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft