Partilhar via


Como: Criar e inicializar fontes de rastreamento

Fontes de rastreamento podem ser criados e inicializados com ou sem o uso de arquivos de configuração.A abordagem recomendada é usar arquivos de configuração para facilitar a reconfiguração dos rastreamentos produzidos por fontes de rastreamento em time de execução.

Criar e inicializar uma fonte de rastreamento usando um arquivo de configuração

  1. Exemplo de código a seguir destina-se a ser executado em conjunto com um arquivo de configuração do aplicativo (mostrado na etapa 2).O arquivo de configuração inicializa as configurações para fonte do rastreamento no momento em que o aplicativo é inicializado.O aplicativo pode alterar dinamicamente as propriedades definidas pelo arquivo de configuração para substituir quaisquer 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 definições de configuração corrente.O seguinte exemplo de código demonstra a substituição das configurações de arquivo para garantir que mensagens críticas são saída para os ouvintes de rastreamento.Alterar as configurações do arquivo de configuração enquanto o aplicativo está sendo executado não altera as configurações iniciais.Para isso você deve reiniciar o aplicativo ou atualizar programaticamente o aplicativo usando o Refresh método.

    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.");
            }
        }
    }
    
  2. Create the following configuration file to initialize the TraceSourceTraceSourceApp in the code example.O arquivo de configuração para um aplicativo hospedado pelo host executável está no mesmo diretório sistema autônomo o aplicativo.O nome do arquivo de configuração é o nome do aplicativo com uma extensão .config.Em nosso exemplo, TraceSourceApp.exe pode ser associado a um arquivo de configuração chamado TraceSourceApp.exe.config.O seguinte arquivo de configuração de exemplo mostra como inicializar um ouvinte de rastreamento do console e um ouvinte de rastreamento do Texto writer para fonte de rastreamento é criado na etapa anterior.Além de configurar os ouvintes de rastreamento, o arquivo de configuração cria filtros para ambos os ouvintes e cria um comutador de fonte para fonte do rastreamento.Duas técnicas são mostradas para adicionar ouvintes de rastreamento: Adicionar o ouvinte diretamente à fonte de rastreamento e adicionar um ouvinte para a coleção de ouvintes compartilhado e adicioná-lo pelo nome à origem de rastreamento.Os filtros identificados para dois ouvintes são inicializados com níveis diferentes de fonte.Isso resultados em algumas mensagens que estão sendo 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>
    

Ao inicializar fontes de rastreamento, ouvintes e filtros sem um arquivo de configuração

  • Você pode instrumentar rastreamento por meio de uma fonte de rastreamento inteiramente através de código sem o uso de um arquivo de configuração.Isso não é recomendável prática, mas pode haver circunstâncias em que você não deseja dependem de arquivos de configuração para garantir que o rastreamento.

    using System;
    using System.Diagnostics;
    using System.Threading;
    
    namespace TraceSourceApp
    {
        class Program
        {
            private static TraceSource mySource =
                new TraceSource("TraceSourceApp");
            static void Main(string[] args)
            {
                mySource.Switch = new SourceSwitch("sourceSwitch", "Error");
                mySource.Listeners.Remove("Default");
                TextWriterTraceListener textListener =
                    new TextWriterTraceListener("myListener.log");
                ConsoleTraceListener console =
                    new ConsoleTraceListener(false);
                console.Filter =
                    new EventTypeFilter(SourceLevels.Information);
                console.Name = "console";
                textListener.Filter =
                    new EventTypeFilter(SourceLevels.Error);
                mySource.Listeners.Add(console);
                mySource.Listeners.Add(textListener);
                Activity1();
    
                // Set the filter settings for the 
                // console trace listener.
                mySource.Listeners["console"].Filter =
                    new EventTypeFilter(SourceLevels.Critical);
                Activity2();
    
                // Allow the trace source to send messages to 
                // listeners for all event types. 
                mySource.Switch.Level = SourceLevels.All;
    
                // Change the filter settings for the console trace listener.
                mySource.Listeners["console"].Filter =
                    new EventTypeFilter(SourceLevels.Information);
                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

Referência

TraceSource

TextWriterTraceListener

ConsoleTraceListener

EventTypeFilter

Outros recursos

Rastreamento e intrumentando aplicações