Share via


Como: Usar TraceSource e filtros com ouvintes de rastreamento

Um dos novos recursos do .NET Framework versão 2.0 é um sistema de rastreamento aprimorado. A premissa básica permanece inalterada: as mensagens de rastreamento são enviadas através de switches para ouvintes, que relatam os dados para um meio de saída associado. Uma diferença principal para a versão 2.0 é que os rastreamentos podem ser iniciados por meio de instâncias da TraceSource classe. TraceSource destina-se a funcionar como um sistema de rastreio melhorado e pode ser utilizado em vez dos métodos estáticos das classes mais antigas Trace e Debug de seguimento. O familiar Trace e Debug as classes ainda existem, mas a prática recomendada é usar a TraceSource classe para rastreamento.

Este tópico descreve o uso de um TraceSource acoplado a um arquivo de configuração do aplicativo. É possível, embora não seja recomendado, rastrear usando um TraceSource sem o uso de um arquivo de configuração. Para obter informações sobre rastreamento sem um arquivo de configuração, consulte Como criar e inicializar fontes de rastreamento.

Para criar e inicializar sua fonte de rastreamento

  1. A primeira etapa para instrumentar um aplicativo com rastreamento é criar uma fonte de rastreamento. Em grandes projetos com vários componentes, você pode criar uma fonte de rastreamento separada para cada componente. A prática recomendada é usar o nome do aplicativo para o nome da fonte de rastreamento. Deste modo, será mais fácil manter separados os diferentes vestígios. 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 gravadas 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.");  
            }  
        }  
    }  
    

Para criar e inicializar ouvintes e filtros de rastreamento

  1. O código no primeiro procedimento não identifica programaticamente quaisquer ouvintes ou filtros de rastreamento. O código por si só resulta nas mensagens de rastreamento sendo gravadas no ouvinte de rastreamento padrão. Para configurar ouvintes de rastreamento específicos 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, definir as propriedades e o filtro para um ouvinte ou remover ouvintes. O exemplo de arquivo de configuração a seguir mostra como inicializar um ouvinte de rastreamento de console e um ouvinte de rastreamento de gravador de texto para a fonte de rastreamento criada no procedimento anterior. Além de configurar os ouvintes de rastreamento, o arquivo de configuração cria filtros para ambos os ouvintes e cria uma opção de origem para a fonte de rastreamento. Duas técnicas são mostradas para adicionar ouvintes de rastreamento: adicionar o ouvinte diretamente à fonte de rastreamento e adicionar um ouvinte à coleção de ouvintes compartilhados e, em seguida, adicioná-lo pelo nome à fonte de rastreamento. Os filtros identificados para os dois ouvintes são inicializados com diferentes níveis de origem. Isso faz com que algumas mensagens sejam escritas 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 em que um ouvinte grava uma mensagem de rastreamento

  1. O arquivo de configuração inicializa as configurações para a fonte de rastreamento no momento em que o aplicativo é inicializado. Para alterar essas configurações, você deve alterar o arquivo de configuração e reiniciar 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 quaisquer configurações especificadas pelo usuário. Por exemplo, talvez você queira garantir que as mensagens críticas sejam sempre enviadas para um arquivo de texto, independentemente das definições de configuração 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