Поделиться через


Практическое руководство. Использование TraceSource и фильтров с прослушивателями трассировки

Одной из новых возможностей в .NET Framework версии 2.0 является расширенная система трассировки. Основное условие осталось неизменным: сообщения трассировки отправляются через переключатели к прослушивателям, которые сообщают данные связанному носителю вывода. Основное отличие версии 2.0 заключается в том, что трассировку можно инициировать через экземпляры класса TraceSource. Класс TraceSource предназначен для использования в качестве улучшенной системы трассировки и может использоваться вместо статических методов применявшихся ранее классов трассировки Trace и Debug. Знакомые классы Trace и Debug все еще существуют, но рекомендуется использование класса TraceSource для трассировки.

В данном разделе описано использование TraceSource в сочетании с файлом конфигурации приложения. Можно выполнять трассировку с помощью TraceSource без использования файла конфигурации, хотя это не рекомендуется. Дополнительные сведения по выполнению трассировки без использования файла конфигурации см. в разделе Практическое руководство. Создание и инициализация источников трассировки.

Создание и инициализация источника трассировки

  • Первым шагом для инструментирования приложения с трассировкой является создание источника трассировки. В крупных проектах с различными компонентами можно создать отдельный источник трассировки для каждого компонента. В качестве имени источника трассировки рекомендуется использовать имя приложения. Благодаря этому проще хранить различные трассировки отдельно. В следующем коде создается новый источник трассировки (mySource) и вызывается метод (Activity1), отслеживающий события. Сообщения трассировки записываются прослушивателем трассировки, назначенным по умолчанию.

    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.");
            }
        }
    }
    

Создание и инициализация прослушивателей трассировки и фильтров

  • Код в первой процедуре не идентифицирует прослушиватели трассировки и фильтры программными средствами. Результатом кода в исходном виде является запись сообщений трассировки прослушивателем трассировки, назначенным по умолчанию. Чтобы настроить конкретные прослушиватели трассировки и их связанные фильтры, измените файл конфигурации, соответствующий имени приложения. В этом файле можно добавить или удалить прослушиватель, задать для прослушивателя свойства и фильтр, или удалить прослушиватели. В следующем файле конфигурации показано, как инициализировать прослушиватель трассировки консоли и прослушиватель трассировки средства записи текста для источника трассировки, созданного в предыдущей процедуре. Помимо настройки прослушивателей трассировки, файл конфигурации создает фильтры для обоих типов прослушивателей и создает переключатель источника для источника трассировки. Демонстрируются два приема для добавления прослушивателей трассировки: добавление прослушивателя непосредственно в источник трассировки, и добавление прослушивателя к общей коллекции прослушивателей, а затем добавление его по имени в источник трассировки. Фильтры, определенные для этих двух прослушивателей, инициализируются с различными уровнями источника. Это приводит к тому, что некоторые сообщения записываются только одним из двух прослушивателей.

    <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>
    

Изменение уровня, на котором прослушиватель записывает сообщение трассировки

  • Файл конфигурации инициализирует настройки для источника трассировки во время инициализации приложения. Чтобы изменить данные настройки, необходимо изменить файл конфигурации и перезапустить приложение, либо обновить приложение программными средствами с помощью метода Trace.Refresh. Приложение может динамически изменить набор свойств с помощью файла конфигурации, чтобы переопределить любые настройки, заданные пользователем. Например, может потребоваться, чтобы важные сообщения всегда отправлялись в текстовый файл, независимо от текущих настроек конфигурации.

    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.");
            }
        }
    }
    

См. также

Задачи

Практическое руководство. Создание и инициализация источников трассировки

Ссылки

TraceSource

TextWriterTraceListener

ConsoleTraceListener

EventTypeFilter

Основные понятия

Прослушиватели трассировки