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


Пошаговое руководство. Фильтрация вывода My.Application.Log (Visual Basic)

В этом пошаговом руководстве демонстрируется изменение фильтрации журнала по умолчанию для объекта My.Application.Log, чтобы контролировать, какие данные передаются из объекта Log в прослушиватели и какие данные записываются прослушивателями. Режим ведения журнала можно изменить даже после создания приложения, поскольку сведения о конфигурации хранятся в файле конфигурации приложения.

Начало работы

Каждое сообщение, записываемое объектом My.Application.Log, имеет соответствующий уровень степени серьезности, используемый механизмами фильтрации для управления выходными данными журнала. В этом примере приложения используются методы My.Application.Log для записи нескольких сообщений журналов с различными уровнями степени серьезности.

Создание примера приложения

  1. Откройте новый проект приложения Windows на Visual Basic.

  2. Добавьте кнопку с именем Button1 в форму Form1.

  3. В обработчик события Click добавьте следующий код для Button1:

    ' Activity tracing information
    My.Application.Log.WriteEntry("Entering Button1_Click", TraceEventType.Start)
    
    ' Tracing information
    My.Application.Log.WriteEntry("In Button1_Click", TraceEventType.Information)
    
    ' Create an exception to log.
    Dim ex As New ApplicationException
    ' Exception information
    My.Application.Log.WriteException(ex)
    
    ' Activity tracing information
    My.Application.Log.WriteEntry("Leaving Button1_Click", TraceEventType.Stop)
    
  4. Запустите приложение в отладчике.

  5. Нажмите кнопку Button1.

    Приложение записывает следующие сведения в файл выходных данных отладки и файл журнала приложения.

    DefaultSource Information: 0 : In Button1_Click

    DefaultSource Error: 2 : Error in the application.

  6. Закройте приложение.

    Сведения о просмотре окна вывода отладочных данных приложения см. в разделе Окно вывода. Сведения о расположении файла журнала приложения см. в разделе Пошаговое руководство. Определение места записи информации для My.Application.Log.

    Примечание.

    По умолчанию приложение записывает выходные данные в файл журнала при закрытии приложения.

    В приведенном выше примере второй вызов метода WriteEntry и вызов метода WriteException приводят к получению данных журнала, а первый и последний вызовы метода WriteEntry — нет. Это связано с тем, что уровнями серьезности для WriteEntry и WriteException являются "Информация" и "Ошибка". Оба эти значения разрешены при фильтрации журнала по умолчанию для объекта My.Application.Log. Однако событиям с уровнями серьезности "Запуск" и "Остановка" запрещено создание выходных данных журнала.

Фильтрация всех прослушивателей My.Application.Log

Объект My.Application.Log использует SourceSwitch с именем DefaultSwitch для управления сообщениями, передаваемыми из методов WriteEntry и WriteException в прослушиватели журнала. DefaultSwitch можно настроить в файле конфигурации приложения, задав в качестве его значения одно из значений перечисления SourceLevels. По умолчанию используется значение "Информация".

В этой таблице показан уровень серьезности, необходимый журналу для записи сообщения в прослушиватели с конкретным параметром DefaultSwitch.

Значение DefaultSwitch Уровень серьезности сообщения, необходимый для вывода
Critical Critical
Error Critical или Error
Warning Critical, Error или Warning
Information Critical, Error, Warning или Information
Verbose Critical, Error, Warning, Information или Verbose
ActivityTracing Start, Stop, Suspend, Resume или Transfer
All Все сообщения разрешены.
Off Все сообщения блокируются.

Примечание.

Каждый метод WriteEntry и WriteException имеет перегрузку, которая не указывает уровень серьезности. Неявным уровнем серьезности для перегрузки WriteEntry является "Информация", а неявным уровнем серьезности для перегрузки WriteException — "Ошибка".

В этой таблице приводятся выходные данные журнала из предыдущего примера: с параметром DefaultSwitch по умолчанию "Информация" только второй вызов метода WriteEntry и вызов метода WriteException формируют выходные данные журнала.

Запись в журнал только событий трассировки действий

  1. Щелкните правой кнопкой мыши файл app.config в обозревателе решений и выберите команду Открыть.

    –или–

    Если файл app.config отсутствует, выполните указанные ниже действия.

    1. В меню Проект выберите пункт Добавить новый элемент.

    2. В диалоговом окне Добавление нового элемента выберите элемент Файл конфигурации приложения.

    3. Нажмите кнопку Добавить.

  2. Найдите раздел <switches> в разделе <system.diagnostics> раздела <configuration> верхнего уровня.

  3. Найдите элемент, добавляющий DefaultSwitch в коллекцию переключателей. Он должен выглядеть аналогично следующему элементу:

    <add name="DefaultSwitch" value="Information" />

  4. Измените значение атрибута value данного свойства на "ActivityTracing".

  5. Содержимое файла app.config должно быть похоже на следующий код XML:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.diagnostics>
        <sources>
          <!-- This section configures My.Application.Log -->
          <source name="DefaultSource" switchName="DefaultSwitch">
            <listeners>
              <add name="FileLog"/>
            </listeners>
          </source>
        </sources>
        <switches>
          <add name="DefaultSwitch" value="ActivityTracing" />
        </switches>
        <sharedListeners>
          <add name="FileLog"
               type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
                     Microsoft.VisualBasic, Version=8.0.0.0,
                     Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
                     processorArchitecture=MSIL"
               initializeData="FileLogWriter"/>
        </sharedListeners>
      </system.diagnostics>
    </configuration>
    
  6. Запустите приложение в отладчике.

  7. Нажмите кнопку Button1.

    Приложение записывает следующие сведения в файл выходных данных отладки и файл журнала приложения.

    DefaultSource Start: 4 : Entering Button1_Click

    DefaultSource Stop: 5 : Leaving Button1_Click

  8. Закройте приложение.

  9. Измените значение атрибута value снова на "Информация".

    Примечание.

    Параметр переключателя DefaultSwitch контролирует только My.Application.Log. На поведение классов System.Diagnostics.Trace и System.Diagnostics.Debug .NET он не влияет.

Отдельная фильтрация прослушивателей My.Application.Log

В предыдущем примере показано, как изменить фильтрацию для всех выходных данных My.Application.Log. В этом примере демонстрируется способ фильтрации отдельных прослушивателей журнала. По умолчанию приложение имеет два прослушивателя, которые выполняют запись в файл выходных данных отладки и файл журнала приложения.

Файл конфигурации управляет поведением прослушивателей журнала, разрешая каждому из них иметь фильтр, аналогичный переключателю My.Application.Log. Прослушиватель журнала будет выводить сообщение только в том случае, если уровень серьезности сообщения допускается фильтром DefaultSwitch журнала и фильтром прослушивателя журнала.

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

Запись в журнал только событий трассировки действий

  1. Щелкните правой кнопкой мыши файл app.config в обозревателе решений и выберите команду Открыть.

    –или–

    Если файл app.config отсутствует, выполните указанные ниже действия.

    1. В меню Проект выберите пункт Добавить новый элемент.

    2. В диалоговом окне Добавление нового элемента выберите элемент Файл конфигурации приложения.

    3. Нажмите кнопку Добавить.

  2. Щелкните правой кнопкой мыши файл app.config в обозревателе решений. Выберите команду Открыть.

  3. Найдите раздел <listeners> в разделе <source> с атрибутом name, равным DefaultSource, в разделе <sources>. Раздел <sources> находится в разделе <system.diagnostics> раздела <configuration> верхнего уровня.

  4. Добавьте этот элемент в раздел <listeners>:

    <!-- Remove the default debug listener. -->
    <remove name="Default"/>
    <!-- Add a filterable debug listener. -->
    <add name="NewDefault"/>
    
  5. Найдите раздел <sharedListeners> в разделе <system.diagnostics> в разделе <configuration> верхнего уровня.

  6. Добавьте в этот раздел <sharedListeners> следующий элемент:

    <add name="NewDefault"
         type="System.Diagnostics.DefaultTraceListener,
               System, Version=2.0.0.0, Culture=neutral,
               PublicKeyToken=b77a5c561934e089,
               processorArchitecture=MSIL">
        <filter type="System.Diagnostics.EventTypeFilter"
                initializeData="Error" />
    </add>
    

    Фильтр EventTypeFilter принимает одно из значений перечисления SourceLevels как атрибут initializeData.

  7. Содержимое файла app.config должно быть похоже на следующий код XML:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.diagnostics>
        <sources>
          <!-- This section configures My.Application.Log -->
          <source name="DefaultSource" switchName="DefaultSwitch">
            <listeners>
              <add name="FileLog"/>
              <!-- Remove the default debug listener. -->
              <remove name="Default"/>
              <!-- Add a filterable debug listener. -->
              <add name="NewDefault"/>
            </listeners>
          </source>
        </sources>
        <switches>
          <add name="DefaultSwitch" value="Information" />
        </switches>
        <sharedListeners>
          <add name="FileLog"
               type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
                     Microsoft.VisualBasic, Version=8.0.0.0,
                     Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
                     processorArchitecture=MSIL"
               initializeData="FileLogWriter"/>
          <add name="NewDefault"
               type="System.Diagnostics.DefaultTraceListener,
                     System, Version=2.0.0.0, Culture=neutral,
                     PublicKeyToken=b77a5c561934e089,
                     processorArchitecture=MSIL">
            <filter type="System.Diagnostics.EventTypeFilter"
                    initializeData="Error" />
          </add>
        </sharedListeners>
      </system.diagnostics>
    </configuration>
    
  8. Запустите приложение в отладчике.

  9. Нажмите кнопку Button1.

    Приложение записывает следующие сведения в файл выходных данных приложения:

    Default Information: 0 : In Button1_Click

    Default Error: 2 : Error in the application.

    В связи с более ограничивающим фильтром приложение записывает меньше данных в выходные данные отладки приложения.

    Default Error 2 Error

  10. Закройте приложение.

Дополнительные сведения об изменении параметров журнала после развертывания см. в разделе Работа с журналами приложения.

См. также