Compartilhar via


TraceSource Classe

Definição

Fornece um conjunto de métodos e propriedades que permitem que os aplicativos rastreiem a execução do código e associem mensagens de rastreamento à origem.

public ref class TraceSource
public class TraceSource
type TraceSource = class
Public Class TraceSource
Herança
TraceSource

Exemplos

O exemplo de código a TraceSource seguir mostra o uso da classe para encaminhar rastreamentos para ouvintes. O exemplo também demonstra o uso de comutador e filtro.

// The following configuration file can be used with this sample.
// When using a configuration file #define ConfigFile.
//            <source name="TraceTest" switchName="SourceSwitch" switchType="System.Diagnostics.SourceSwitch" >
//                    <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" />
//                    <remove name ="Default" />
//            <!-- 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" -->
//        <trace autoflush="true" indentsize="4"></trace>
#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");
                ts.Switch = sourceSwitch;
                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("TraceSource name = " + ts.Name);
            Console.WriteLine("TraceSource switch level = " + ts.Switch.Level);
            Console.WriteLine("TraceSource switch = " + ts.Switch.DisplayName);
            SwitchAttribute[] switches = SwitchAttribute.GetAll(typeof(TraceTest).Assembly);
            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));
            }
        }
    }
}
' The following configuration file can be used with this sample.
' When using a configuration file #define ConfigFile.
'            <source name="TraceTest" switchName="SourceSwitch" switchType="System.Diagnostics.SourceSwitch" >
'                    <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" />
'                    <remove name ="Default" />
'            <!-- 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" -->
'        <trace autoflush="true" indentsize="4"></trace>
#Const TRACE = True
'#Const ConfigFile = True

Imports System.Collections
Imports System.Diagnostics
Imports System.Reflection
Imports System.IO
Imports System.Security.Permissions



Class TraceTest
    ' Initialize the trace source.
    Private Shared ts As New TraceSource("TraceTest")
    <SwitchAttribute("SourceSwitch", GetType(SourceSwitch))> _
    Shared Sub Main()
        Try
            ' Initialize trace switches.
#If (ConfigFile = False) Then
            Dim sourceSwitch As New SourceSwitch("SourceSwitch", "Verbose")
            ts.Switch = sourceSwitch
            Dim idxConsole As New Integer()
            idxConsole = ts.Listeners.Add(New System.Diagnostics.ConsoleTraceListener())
            ts.Listeners(idxConsole).Name = "console"
#End If
            DisplayProperties(ts)
            ts.Listeners("console").TraceOutputOptions = ts.Listeners("console").TraceOutputOptions Or 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 = ts.Listeners("console").TraceOutputOptions Or 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 = Nothing
            ' 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 Or 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 e As Exception
            ' Catch any unexpected exception.
            Console.WriteLine("Unexpected exception: " + e.ToString())
            Console.Read()
        End Try

    End Sub

    Public Shared Sub DisplayProperties(ByVal ts As TraceSource)
        Console.WriteLine("TraceSource name = " + ts.Name)
        Console.WriteLine("TraceSource switch level = " + ts.Switch.Level.ToString())
        Console.WriteLine("TraceSource switch = " + ts.Switch.DisplayName.ToString())
        Dim switches As SwitchAttribute() = SwitchAttribute.GetAll(GetType(TraceTest).Assembly)
        Dim i As Integer
        For i = 0 To switches.Length - 1
            Console.WriteLine("Switch name = " + switches(i).SwitchName.ToString())
            Console.WriteLine("Switch type = " + switches(i).SwitchType.ToString())
        Next i

#If (ConfigFile) Then
        ' Get the custom attributes for the TraceSource.
        Console.WriteLine("Number of custom trace source attributes = " + ts.Attributes.Count)
        Dim de As DictionaryEntry
        For Each de In ts.Attributes
            Console.WriteLine("Custom trace source attribute = " + de.Key + "  " + de.Value)
        Next de
        ' Get the custom attributes for the trace source switch.
        For Each de In ts.Switch.Attributes
            Console.WriteLine("Custom switch attribute = " + de.Key + "  " + de.Value)
        Next de
#End If
        Console.WriteLine("Number of listeners = " + ts.Listeners.Count.ToString())
        Dim traceListener As TraceListener
        For Each traceListener In ts.Listeners
            Console.Write("TraceListener: " + traceListener.Name + vbTab)
            ' The following output can be used to update the configuration file.
            Console.WriteLine("AssemblyQualifiedName = " + traceListener.GetType().AssemblyQualifiedName)
        Next traceListener

    End Sub
End Class

Comentários

A TraceSource classe é usada por aplicativos para produzir rastreamentos que podem ser associados ao aplicativo. TraceSource fornece métodos de rastreamento que permitem rastrear facilmente eventos, rastrear dados e emitir rastreamentos informativos.

Em aplicativos do .NET Framework, a saída de TraceSource rastreamento pode ser controlada por configurações de arquivo. O arquivo de configuração está localizado na pasta com o aplicativo executável e tem o nome do aplicativo com a extensão .config adicionada. Por exemplo, o nome do arquivo de configuração para TraceSourceSample.exe é TraceSourceSample.exe.config. O arquivo de configuração pode ser usado para especificar para onde as informações de rastreamento devem ser enviadas e quais níveis de atividade devem ser rastreados. O exemplo a seguir mostra o conteúdo de um arquivo de configuração de aplicativo do .NET Framework de exemplo.

<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>

A TraceSource classe é identificada pelo nome de uma origem, normalmente o nome do aplicativo. As mensagens de rastreamento provenientes de um componente específico podem ser iniciadas por uma fonte de rastreamento específica, permitindo que todas as mensagens provenientes desse componente sejam facilmente identificadas.

TraceSource define métodos de rastreamento, mas não fornece nenhum mecanismo específico para gerar e armazenar dados de rastreamento. Os dados de rastreamento são produzidos por ouvintes de rastreamento, que são plug-ins que podem ser carregados por fontes de rastreamento.

Observação

Você não deve chamar os métodos de rastreamento durante a finalização. Fazer isso pode resultar em uma ObjectDisposedException jogada.

Você pode personalizar o destino da saída de rastreamento adicionando ou removendo TraceListener instâncias de ou para a coleção armazenada na TraceSource.Listeners propriedade. Por padrão, a saída de rastreamento é produzida usando uma instância da DefaultTraceListener classe.

O exemplo de arquivo de configuração de aplicativo do .NET Framework anterior demonstra a remoção e a DefaultTraceListener adição de um ConsoleTraceListener para produzir a saída de rastreamento para a fonte de rastreamento. Para obter mais informações, consulte <ouvintes> e <sharedListeners>.

Observação

Adicionar um ouvinte de rastreamento à Listeners coleção pode fazer com que uma exceção seja gerada durante o rastreamento, se um recurso usado pelo ouvinte de rastreamento não estiver disponível. As condições e a exceção gerada dependem do ouvinte de rastreamento e não podem ser enumeradas neste tópico. Pode ser útil fazer chamadas aos TraceSource métodos em try/catch blocos para detectar e manipular quaisquer exceções de ouvintes de rastreamento.

A SourceSwitch classe fornece os meios para controlar dinamicamente a saída de rastreamento. Para aplicativos do .NET Framework, o exemplo de arquivo de configuração anterior mostra como você pode desativar o rastreamento de uma fonte de rastreamento e controlar o nível no qual o rastreamento ocorre. Você pode modificar o valor da opção de origem sem recompilar seu aplicativo. Para obter informações sobre como usar o arquivo de configuração para definir um comutador, consulte Switch e Como criar, inicializar e configurar comutadores de rastreamento.

Observação

Se você modificar um arquivo de configuração enquanto um aplicativo estiver em execução, o aplicativo deverá ser interrompido e reiniciado ou o Refresh método deverá ser chamado antes que as novas configurações entrem em vigor.

A TraceEventType enumeração é usada para definir o tipo de evento da mensagem de rastreamento. Os filtros de rastreamento usam o TraceEventType para determinar se um ouvinte de rastreamento deve produzir a mensagem de rastreamento.

Opcionalmente, os ouvintes de rastreamento podem ter uma camada adicional de filtragem por meio de um filtro de rastreamento. Se um ouvinte de rastreamento tiver um filtro associado, o ouvinte chamará o ShouldTrace método nesse filtro para determinar se deve ou não produzir as informações de rastreamento.

Os ouvintes de rastreamento usam os valores das propriedades IndentIndentSizeda Trace classe e AutoFlush para formatar a saída de rastreamento. Em aplicativos do .NET Framework, você pode usar atributos de arquivo de configuração para definir as propriedades e AutoFlush as IndentIndentSizepropriedades. O exemplo a seguir define a AutoFlush propriedade como false e a IndentSize propriedade como 3.

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

Construtores

Nome Description
TraceSource(String, SourceLevels)

Inicializa uma nova instância da TraceSource classe, usando o nome especificado para a origem e o nível de origem padrão no qual o rastreamento deve ocorrer.

TraceSource(String)

Inicializa uma nova instância da TraceSource classe usando o nome especificado para a origem.

Propriedades

Nome Description
Attributes

Obtém os atributos de comutador personalizados definidos no arquivo de configuração do aplicativo.

DefaultLevel

Obtém o nível padrão atribuído no construtor.

Listeners

Obtém a coleção de ouvintes de rastreamento para a fonte de rastreamento.

Name

Obtém o nome da fonte de rastreamento.

Switch

Obtém ou define o valor da opção de origem.

Métodos

Nome Description
Close()

Fecha todos os ouvintes de rastreamento na coleção de ouvintes de rastreamento.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Flush()

Libera todos os ouvintes de rastreamento na coleção de ouvintes de rastreamento.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetSupportedAttributes()

Obtém os atributos personalizados compatíveis com a origem do rastreamento.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
TraceData(TraceEventType, Int32, Object)

Grava dados de rastreamento nos ouvintes de rastreamento na Listeners coleção usando o tipo de evento, o identificador de evento e os dados de rastreamento especificados.

TraceData(TraceEventType, Int32, Object[])

Grava dados de rastreamento nos ouvintes de rastreamento na Listeners coleção usando o tipo de evento, o identificador de evento e a matriz de dados de rastreamento especificados.

TraceEvent(TraceEventType, Int32, String, Object[])

Grava um evento de rastreamento nos ouvintes de rastreamento na Listeners coleção usando o tipo de evento especificado, o identificador de evento e a matriz e o formato do argumento.

TraceEvent(TraceEventType, Int32, String)

Grava uma mensagem de evento de rastreamento para os ouvintes de rastreamento na Listeners coleção usando o tipo de evento, o identificador de evento e a mensagem especificados.

TraceEvent(TraceEventType, Int32)

Grava uma mensagem de evento de rastreamento para os ouvintes de rastreamento na Listeners coleção usando o tipo de evento e o identificador de evento especificados.

TraceInformation(String, Object[])

Grava uma mensagem informativa para os ouvintes de rastreamento na Listeners coleção usando a matriz de objetos especificada e as informações de formatação.

TraceInformation(String)

Grava uma mensagem informativa para os ouvintes de rastreamento na Listeners coleção usando a mensagem especificada.

TraceTransfer(Int32, String, Guid)

Grava uma mensagem de transferência de rastreamento para os ouvintes de rastreamento na Listeners coleção usando o identificador numérico, a mensagem e o identificador de atividade relacionado especificados.

Eventos

Nome Description
Initializing

Ocorre quando é TraceSource necessário inicializar.

Aplica-se a

Acesso thread-safe

Esse tipo é thread safe.

Confira também