Como: Usar TraceSource e filtros com Listeners de rastreamento
Um dos novos recursos na.NET Framework versão 2.0 é um sistema de rastreamento avançado. A premissa básica é alterada: mensagens de rastreamento são enviadas através de switches para os ouvintes de que os dados de relatório para uma mídia de saída associados. A diferença principal para a versão 2.0 é que os rastreamentos podem ser iniciados por meio de instâncias da TraceSource classe. TraceSourceo objetivo é funcionar como um sistema de rastreamento avançado e pode ser usado no lugar dos métodos estáticos do antigo Trace e Debug classes de rastreamento. Familiar Trace e Debug classes ainda existem, mas a prática recomendada é usar o TraceSource classe para rastreamento.
Este tópico descreve o uso de um TraceSource juntamente com um arquivo de configuração do aplicativo. É possível, embora não recomendada para rastreamento usando um TraceSource sem o uso de um arquivo de configuração. Para obter informações sobre o rastreamento sem um arquivo de configuração, consulte Como: Criar e inicializar fontes de rastreamento.
Para criar e inicializar a origem do rastreamento
A primeira etapa para instrumentar um aplicativo com o rastreamento é criar uma fonte de rastreamento. Em projetos grandes com vários componentes, você pode criar uma fonte de rastreamento separado para cada componente. A prática recomendada é usar o nome do aplicativo para o nome de origem de rastreamento. Isso facilitará manter os rastreamentos diferentes separados. O código a seguir cria uma nova fonte de rastreamento (mySource) e chama um método (Activity1) que rastreia eventos. As mensagens de rastreamento são escritas pelo ouvinte de rastreamento padrão.
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."); } } }
Criar e inicializar os filtros e ouvintes de rastreamento
O código no primeiro procedimento não programaticamente identificar qualquer ouvintes de rastreamento ou filtros. O código sozinho resulta nas mensagens de rastreamento serem gravadas para o ouvinte de rastreamento padrão. Para configurar os ouvintes de rastreamento específica e seus filtros associados, edite o arquivo de configuração que corresponde ao nome do seu aplicativo. Nesse arquivo, você pode adicionar ou remover um ouvinte, defina as propriedades e o filtro de um ouvinte ou remover ouvintes. O exemplo de arquivo de configuração a seguir mostra como inicializar um ouvinte de rastreamento do console e um ouvinte de rastreamento do gravador de texto para a fonte de rastreamento é criado no procedimento anterior. Além de configurar os ouvintes de rastreamento, o arquivo de configuração cria filtros para ambos os ouvintes e cria um switch de origem para a fonte de rastreamento. Duas técnicas são mostradas para adicionar ouvintes de rastreamento: a adição do ouvinte diretamente para a fonte de rastreamento e adicionar um ouvinte à coleção listeners compartilhado e adicioná-lo pelo nome para a origem de rastreamento. Os filtros identificados para dois ouvintes são inicializados com níveis de origem diferente. Isso resulta em algumas mensagens que estão sendo gravadas por apenas um dos dois ouvintes.
<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 alterar o nível no qual um ouvinte grava uma mensagem de rastreamento
O arquivo de configuração inicializa as configurações para a origem de rastreamento no momento em que o aplicativo é inicializado. Para alterar essas configurações você deve alterar o arquivo de configuração e reinicie o aplicativo ou atualizar programaticamente o aplicativo usando o Trace.Refresh método. O aplicativo pode alterar dinamicamente as propriedades definidas pelo arquivo de configuração para substituir as configurações especificadas pelo usuário. Por exemplo, convém garantir que mensagens críticas sempre são enviadas para um arquivo de texto, independentemente das configurações atuais.
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 também
Tarefas
Como: Criar e inicializar fontes de rastreamento