Compartilhar via


Como: Criar e inicializar fontes de rastreamento

Fontes de rastreamento (System.Diagnostics.TraceSource objetos) podem ser criados e inicializados com ou sem o uso de arquivos de configuração. Este tópico fornece instruções para as duas opções. No entanto, recomendamos que você use os arquivos de configuração para facilitar a reconfiguração dos rastreamentos produzidos por fontes de rastreamento em tempo de execução.

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

  1. Criar um projeto de aplicativo do console de Visual Studio e substitua o código fornecido com o código a seguir.

    Imports System
    Imports System.Diagnostics
    
    Class TraceTest
    
        Private Shared mySource As New TraceSource("TraceSourceApp")
    
        Shared Sub Main(ByVal args() As String) 
            ' Issue an error and a warning message. Only the error message
            ' should be logged.
            Activity1()
    
            ' Save the original settings from the configuration file.
            Dim configFilter As EventTypeFilter = CType(mySource.Listeners("console").Filter, EventTypeFilter)
    
            ' Create a new event type filter that ensures 
            ' warning messages will be written.
            mySource.Listeners("console").Filter = New EventTypeFilter(SourceLevels.Warning)
    
            ' Allow the trace source to send messages to listeners 
            ' for all event types. This statement will override 
            ' any settings in the configuration file.
            ' If you do not change the switch level, the event filter
            ' changes have no effect.
            mySource.Switch.Level = SourceLevels.All
    
            ' Issue a warning and a critical message. Both should be logged.
            Activity2()
    
            ' Restore the original filter settings.
            mySource.Listeners("console").Filter = configFilter
            Activity3()
            mySource.Close()
            Return
    
        End Sub
    
        Shared Sub Activity1() 
            mySource.TraceEvent(TraceEventType.Error, 1, "Error message.")
            mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message.")
    
        End Sub
    
        Shared Sub Activity2() 
            mySource.TraceEvent(TraceEventType.Critical, 3, "Critical message.")
            mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message.")
    
        End Sub
    
        Shared Sub Activity3() 
            mySource.TraceEvent(TraceEventType.Error, 4, "Error message.")
            mySource.TraceInformation("Informational message.")
    
        End Sub 'Activity3
    End Class
    
    using System;
    using System.Diagnostics;
    
    class TraceTest
    {
    
        private static TraceSource mySource = 
                new TraceSource("TraceSourceApp");
            static void Main(string[] args)
            {
               // Issue an error and a warning message. Only the error message
                // should be logged.
                Activity1();
    
                // Save the original settings from the configuration file.
                EventTypeFilter configFilter = 
                    (EventTypeFilter)mySource.Listeners["console"].Filter;
    
                // Create a new event type filter that ensures 
                // warning messages will be written.
                mySource.Listeners["console"].Filter =
                    new EventTypeFilter(SourceLevels.Warning);
    
                // Allow the trace source to send messages to listeners 
                // for all event types. This statement will override 
                // any settings in the configuration file.
                // If you do not change the switch level, the event filter
                // changes have no effect.
                mySource.Switch.Level = SourceLevels.All;
    
                // Issue a warning and a critical message. Both should be logged.
                Activity2();
    
                // 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.TraceEvent(TraceEventType.Warning, 2,
                    "Warning message.");
            }
            static void Activity3()
            {
                mySource.TraceEvent(TraceEventType.Error, 4, 
                    "Error message.");
                mySource.TraceInformation("Informational message.");
            }
        }
    
  2. Adicionar um arquivo de configuração do aplicativo ao projeto para inicializar a origem de rastreamento chamada TraceSourceApp no exemplo de código na etapa 1.

  3. Substitua as configurações padrão do arquivo de configuração com as seguintes configurações para inicializar um ouvinte de rastreamento do console e um ouvinte de rastreamento do gravador de texto para a fonte de rastreamento que foi criada na etapa 1.

    <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="Error"/>
              </add>
              <add name="myListener"/>
              <remove name="Default"/>
            </listeners>
          </source>
        </sources>
        <switches>
          <add name="sourceSwitch" value="Error"/>
        </switches>
        <sharedListeners>
          <add name="myListener" 
            type="System.Diagnostics.TextWriterTraceListener" 
            initializeData="myListener.log">
            <filter type="System.Diagnostics.EventTypeFilter" 
              initializeData="Error"/>
          </add>
        </sharedListeners>
      </system.diagnostics>
    </configuration>
    

    Além de configurar os ouvintes de rastreamento, o arquivo de configuração cria filtros para os dois 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.

    O arquivo de configuração inicializa as configurações para a origem de rastreamento no momento em que o aplicativo é inicializado. 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. O exemplo de código demonstra como substituir o arquivo de configuração para garantir que mensagens críticas sejam 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 alterar as configurações, você deve reiniciar o aplicativo ou atualizar o aplicativo programaticamente usando o Trace.Refresh método.

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

  • Use o seguinte exemplo de código para ativar o rastreamento por meio de uma origem de rastreamento sem usar um arquivo de configuração. Não é uma prática recomendada, mas pode haver circunstâncias em que você não deseja dependem de arquivos de configuração para garantir que o rastreamento.

    Imports System
    Imports System.Diagnostics
    Imports System.Threading
    
    
    
    Class Program
        Private Shared mySource As New TraceSource("TraceSourceApp")
    
        Shared Sub Main(ByVal args() As String) 
            mySource.Switch = New SourceSwitch("sourceSwitch", "Error")
            mySource.Listeners.Remove("Default")
            Dim textListener As New TextWriterTraceListener("myListener.log")
            Dim console As 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()
    
            ' Allow the trace source to send messages to 
            ' listeners for all event types. Currently only 
            ' error messages or higher go to the listeners.
            ' Messages must get past the source switch to 
            ' get to the listeners, regardless of the settings 
            ' for the listeners.
            mySource.Switch.Level = SourceLevels.All
    
            ' Set the filter settings for the 
            ' console trace listener.
            mySource.Listeners("console").Filter = New EventTypeFilter(SourceLevels.Critical)
            Activity2()
    
            ' Change the filter settings for the console trace listener.
            mySource.Listeners("console").Filter = New EventTypeFilter(SourceLevels.Information)
            Activity3()
            mySource.Close()
            Return
    
        End Sub
    
        Shared Sub Activity1() 
            mySource.TraceEvent(TraceEventType.Error, 1, "Error message.")
            mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message.")
    
        End Sub
    
        Shared Sub Activity2() 
            mySource.TraceEvent(TraceEventType.Critical, 3, "Critical message.")
            mySource.TraceInformation("Informational message.")
    
        End Sub
    
        Shared Sub Activity3() 
            mySource.TraceEvent(TraceEventType.Error, 4, "Error message.")
            mySource.TraceInformation("Informational message.")
    
        End Sub
    End Class
    
    
    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();
    
                // Allow the trace source to send messages to 
                // listeners for all event types. Currently only 
                // error messages or higher go to the listeners.
                // Messages must get past the source switch to 
                // get to the listeners, regardless of the settings 
                // for the listeners.
                mySource.Switch.Level = SourceLevels.All;
    
                // Set the filter settings for the 
                // console trace listener.
                mySource.Listeners["console"].Filter =
                    new EventTypeFilter(SourceLevels.Critical);
                Activity2();
    
                // 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