TraceSource Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Fornece um conjunto de métodos e propriedades que permitem às aplicações rastrear a execução do código e associar mensagens de rastreio à sua fonte.
public ref class TraceSource
public class TraceSource
type TraceSource = class
Public Class TraceSource
- Herança
-
TraceSource
Exemplos
O exemplo de código seguinte mostra o uso da TraceSource classe para encaminhar traços para ouvintes. O exemplo também demonstra o uso de interruptores e filtros.
// 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
Observações
A TraceSource classe é utilizada por aplicações para produzir rastros que podem ser associados à aplicação. TraceSource Fornece métodos de rastreio que permitem rastrear facilmente eventos, rastrear dados e emitir vestígios informativos.
Nas aplicações .NET Framework, a saída de traços de TraceSource pode ser controlada pelas definições do ficheiro de configuração. O ficheiro de configuração está localizado na pasta com o executável da aplicação e tem o nome da aplicação com a extensão .config adicionada. Por exemplo, o nome do ficheiro de configuração para TraceSourceSample.exe é TraceSourceSample.exe.config. O ficheiro de configuração pode ser usado para especificar onde a informação do rastreio deve ser enviada e que níveis de atividade devem ser rastreados. O exemplo seguinte mostra o conteúdo de um ficheiro de configuração de aplicação .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 fonte, tipicamente o nome da aplicação. As mensagens de rastreamento provenientes de um determinado componente podem ser iniciadas por uma fonte de traço específica, permitindo que todas as mensagens provenientes desse componente sejam facilmente identificadas.
TraceSource define métodos de rastreamento, mas não fornece realmente nenhum mecanismo específico para gerar e armazenar dados de rastreio. Os dados de rastreio são produzidos por ouvintes de traços, que são plug-ins que podem ser carregados por fontes de traço.
Note
Não deve chamar os métodos de rastreamento durante a finalização. Fazê-lo pode resultar numa ObjectDisposedException expulsão.
Pode personalizar o destino da saída do rastreio adicionando ou removendo TraceListener instâncias para ou da coleção armazenada na TraceSource.Listeners propriedade. Por defeito, a saída do traço é produzida usando uma instância da DefaultTraceListener classe.
O exemplo anterior do ficheiro de configuração da aplicação .NET Framework demonstra a remoção do DefaultTraceListener e a adição de um ConsoleTraceListener para produzir a saída do traço para a fonte do traço. Para mais informações, consulte <ouvintes> e <ouvintes partilhados>.
Note
Adicionar um ouvinte de rastreio à Listeners coleção pode causar uma exceção durante o rastreamento, caso um recurso utilizado pelo ouvinte de rastreio não esteja disponível. As condições e a exceção lançada dependem do ouvinte de traços e não podem ser enumeradas neste tópico. Pode ser útil fazer chamadas aos TraceSource métodos em try/catch blocos para detetar e tratar quaisquer exceções dos ouvintes de traços.
A SourceSwitch classe fornece os meios para controlar dinamicamente a saída do traçado. Para aplicações .NET Framework, o exemplo anterior do ficheiro de configuração mostra como pode desligar o rastreamento a partir de uma fonte de rastreio e controlar o nível em que o rastreio ocorre. Pode modificar o valor do comutador de origem sem ter de recompilar a sua aplicação. Para informações sobre como usar o ficheiro de configuração para configurar um comutador, veja Switch e Como: Criar, Inicializar e Configurar Comutadores de Traço.
Note
Se modificar um ficheiro de configuração enquanto uma aplicação está a correr, a aplicação deve ser parada e reiniciada ou o Refresh método deve ser chamado antes de as novas definições entrarem em vigor.
A TraceEventType enumeração é usada para definir o tipo de evento da mensagem de rastreio. Os filtros de traço utilizam o TraceEventType para determinar se um ouvinte de traço deve produzir a mensagem de rastreio.
Os ouvintes de traços podem opcionalmente ter uma camada adicional de filtragem através de um filtro de traço. Se um ouvinte de traços tiver um filtro associado, o ouvinte chama o ShouldTrace método nesse filtro para determinar se deve ou não produzir a informação do traço.
Os ouvintes de traços usam os valores das Trace propriedades Indentda classe , IndentSize, e AutoFlush para formatar a saída dos traços. Nas aplicações .NET Framework, podes usar atributos do ficheiro de configuração para definir as propriedades Indent, IndentSize e AutoFlush. O exemplo seguinte define a AutoFlush propriedade para false e a IndentSize propriedade para 3.
<configuration>
<system.diagnostics>
<trace autoflush="false" indentsize="3" />
</system.diagnostics>
</configuration>
Construtores
| Name | Description |
|---|---|
| TraceSource(String, SourceLevels) |
Inicializa uma nova instância da TraceSource classe, usando o nome especificado para a fonte e o nível padrão da fonte onde o rastreamento deve ocorrer. |
| TraceSource(String) |
Inicializa uma nova instância da TraceSource classe, usando o nome especificado para a fonte. |
Propriedades
| Name | Description |
|---|---|
| Attributes |
Obtém os atributos personalizados do switch definidos no ficheiro de configuração da aplicação. |
| Listeners |
Obtém a coleção de ouvintes de rastreamento para a fonte de rastreamento. |
| Name |
Obtém o nome da fonte do traço. |
| Switch |
Obtém ou define o valor do switch de origem. |
Métodos
| Name | 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() |
Elimina todos os ouvintes de rastreamento na coleção de ouvintes de rastreamento. |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetSupportedAttributes() |
Obtém os atributos personalizados suportados pela fonte do traço. |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |
| TraceData(TraceEventType, Int32, Object) |
Escreve dados de rastreio para os ouvintes de rastreio na Listeners coleção usando o tipo de evento especificado, identificador de evento e dados de rastreio. |
| TraceData(TraceEventType, Int32, Object[]) |
Escreve dados de rastreio para os ouvintes de rastreio na Listeners coleção usando o tipo de evento especificado, identificador de evento e array de dados de traço. |
| TraceEvent(TraceEventType, Int32, String, Object[]) |
Escreve um evento de traço para os ouvintes de traços na Listeners coleção usando o tipo de evento especificado, identificador de evento e array e formato de argumentos. |
| TraceEvent(TraceEventType, Int32, String) |
Escreve uma mensagem de evento de rastreio para os ouvintes de rastreio na Listeners coleção usando o tipo de evento especificado, identificador de evento e mensagem. |
| TraceEvent(TraceEventType, Int32) |
Escreve uma mensagem de evento de rastreio para os ouvintes de rastreio na Listeners coleção usando o tipo de evento especificado e o identificador de evento. |
| TraceInformation(String, Object[]) |
Escreve uma mensagem informativa para os ouvintes de traços na Listeners coleção usando o array de objetos especificados e a informação de formatação. |
| TraceInformation(String) |
Escreve uma mensagem informativa para os ouvintes de traços na Listeners coleção usando a mensagem especificada. |
| TraceTransfer(Int32, String, Guid) |
Escreve uma mensagem de transferência de traço para os ouvintes de traços na Listeners coleção usando o identificador numérico especificado, mensagem e identificador de atividade relacionado. |
Aplica-se a
Segurança de Thread
Este tipo é seguro para fios.