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


Настройка трассировки

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

Рекомендации по настройке трассировки в рабочей или отладке среды см. в разделе "Рекомендуемые параметры для отслеживания и ведения журнала сообщений".

Это важно

В Windows 8 необходимо запустить приложение с повышенными привилегиями (запуск от имени администратора), чтобы приложение создавало журналы трассировки.

Включение трассировки

Windows Communication Foundation (WCF) выводит следующие данные для диагностической трассировки:

  • Трассировки для ключевых точек процесса во всех компонентах приложений, таких как вызовы операций, исключения в коде, предупреждения и другие важные события обработки.

  • События ошибок Windows при сбоях функции трассировки. См. ведение журнала событий.

Трассировка WCF построена на основе System.Diagnostics. Чтобы использовать трассировку, необходимо определить источники трассировки в файле конфигурации или коде. WCF определяет источник трассировки для каждой сборки WCF. System.ServiceModel Источник трассировки является самым общим источником трассировки WCF и записывает вехи обработки в стеке коммуникации WCF, от ввода и выхода транспорта до ввода и выхода пользовательского кода. Источник System.ServiceModel.MessageLogging трассировки записывает все сообщения, которые передаются через систему.

Трассировка по умолчанию не включена. Чтобы активировать трассировку, необходимо создать прослушиватель трассировки и задать уровень трассировки, отличный от "Off" для выбранного источника трассировки в конфигурации; в противном случае WCF не создает трассировки. Если прослушиватель не указан, трассировка автоматически отключается. Если прослушиватель определен, но уровень не указан, этот уровень по умолчанию выставляется в "Выкл.", что означает, что трассировка не создается.

При использовании точек расширения WCF, таких как пользовательские вызыватели операций, следует создавать собственные трассировки. Это связано с тем, что если вы реализуете точку расширяемости, WCF больше не сможет выдавать стандартные трассировки в пути по умолчанию. Если вы не реализуете поддержку трассировки вручную путем создания трассировок, возможно, вы не увидите ожидаемые трассировки.

Вы можете настроить трассировку, изменив файл конфигурации приложения Web.config для веб-приложений или Appname.exe.config для локальных приложений. Ниже приведен пример такого изменения. Дополнительные сведения об этих параметрах см. в разделе "Настройка прослушивателей трассировки для использования трассировок".

<configuration>  
   <system.diagnostics>  
      <sources>  
         <source name="System.ServiceModel"
                    switchValue="Information, ActivityTracing"  
                    propagateActivity="true">  
            <listeners>  
               <add name="traceListener"
                   type="System.Diagnostics.XmlWriterTraceListener"
                   initializeData= "c:\log\Traces.svclog" />  
            </listeners>  
         </source>  
      </sources>  
   </system.diagnostics>  
</configuration>  

Замечание

Чтобы изменить файл конфигурации проекта службы WCF в Visual Studio, щелкните правой кнопкой мыши файл конфигурации приложения ( Web.config для веб-приложений или Appname.exe.config для локального приложения в обозревателе решений. Затем выберите пункт контекстного меню "Изменить конфигурацию WCF ". При этом запускается средство редактора конфигурации (SvcConfigEditor.exe), которое позволяет изменять параметры конфигурации для служб WCF с помощью графического пользовательского интерфейса.

Настройка источников трассировки для отправки трассировок

WCF определяет источник трассировки для каждой сборки. К трассировкам, созданным в сборке, обращаются прослушиватели, определенные для этого источника. Определены следующие источники трассировки:

  • System.ServiceModel: регистрирует все этапы обработки WCF: каждый раз при чтении конфигурации, обработке сообщения на транспортном уровне, обработке, связанной с безопасностью, отправке сообщения в пользовательском коде и т. д.

  • System.ServiceModel.MessageLogging: записывает все сообщения, передаваемые через систему.

  • System.IdentityModel.

  • System.ServiceModel.Activation.

  • System.IO.Log: ведение журнала для интерфейса .NET Framework к Общей Системе Журналов Файлов (CLFS).

  • System.Runtime.Serialization: журналы, когда объекты считываются или записываются.

  • CardSpace.

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

<configuration>  
    <system.diagnostics>  
        <sources>  
            <source name="System.ServiceModel"
                    switchValue="Information, ActivityTracing"  
                    propagateActivity="true">  
                <listeners>  
                    <add name="xml" />  
                </listeners>  
            </source>  
            <source name="CardSpace">  
                <listeners>  
                    <add name="xml" />  
                </listeners>  
            </source>  
            <source name="System.IO.Log">  
                <listeners>  
                    <add name="xml" />  
                </listeners>  
            </source>  
            <source name="System.Runtime.Serialization">  
                <listeners>  
                    <add name="xml" />  
                </listeners>  
            </source>  
            <source name="System.IdentityModel">  
                <listeners>  
                    <add name="xml" />  
                </listeners>  
            </source>  
        </sources>  
  
        <sharedListeners>  
            <add name="xml"  
                 type="System.Diagnostics.XmlWriterTraceListener"  
                 initializeData="c:\log\Traces.svclog" />  
        </sharedListeners>  
    </system.diagnostics>  
</configuration>  

Кроме того, можно добавить определяемые пользователем источники трассировки, как показано в следующем примере, чтобы вывести трассировки пользовательского кода.

<system.diagnostics>  
   <sources>  
       <source name="UserTraceSource" switchValue="Warning, ActivityTracing" >  
          <listeners>  
              <add name="xml"  
                 type="System.Diagnostics.XmlWriterTraceListener"  
                 initializeData="C:\logs\UserTraces.svclog" />  
          </listeners>  
       </source>  
   </sources>  
   <trace autoflush="true" />
</system.diagnostics>  

Дополнительные сведения о создании определяемых пользователем источников трассировки см. в разделе "Расширение трассировки".

Настройка прослушивателей для обработки трассировок

Во время выполнения WCF передает данные трассировки прослушивателям, которые обрабатывают данные. WCF предоставляет несколько предопределенных прослушивателей для System.Diagnostics, которые отличаются форматом, который они используют для вывода. Можно также добавить пользовательские типы прослушивателя.

Можно использовать add для указания имени и типа прослушивателя трассировки, который вы хотите использовать. В нашем примере конфигурации мы назвали прослушиватель traceListener и добавили стандартный прослушиватель трассировки .NET Framework (System.Diagnostics.XmlWriterTraceListener) в качестве типа, который мы хотим использовать. Можно добавить любое количество прослушивателей трассировки для каждого источника. Если прослушиватель трассировки записывает трассировку в файл, нужно указать расположение и имя выходного файла в файле конфигурации. Это делается путем задания initializeData имени файла для этого прослушивателя. Если имя файла не указано, создается случайное имя файла на основе используемого типа прослушивателя. Если XmlWriterTraceListener используется, имя файла без расширения создается. При реализации пользовательского прослушивателя можно также использовать этот атрибут для получения данных инициализации, отличных от имени файла. Например, можно указать идентификатор базы данных для этого атрибута.

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

Вы также можете программно настроить прослушиватель трассировки. Дополнительные сведения см. в разделах "Практическое руководство: создание и инициализация прослушивателей трассировки" и "Создание настраиваемого прослушивателя трассировки".

Осторожность

Так как System.Diagnostics.XmlWriterTraceListener не является потокобезопасен, источник трассировки может блокировать ресурсы исключительно, когда выводит трассировки. Если многие потоки выводят трассировки в источник трассировки, настроенный для использования этого прослушивателя, может возникнуть соперничество за ресурсы, что приводит к значительной проблеме с производительностью. Чтобы устранить эту проблему, следует реализовать пользовательский прослушиватель, безопасный для потоков.

Уровень трассировки

Уровень трассировки управляется switchValue параметром источника трассировки. Доступные уровни трассировки описаны в следующей таблице.

Уровень трассировки Природа отслеживаемых событий Содержимое отслеживаемых событий Отслеживаемые события Целевой объект пользователя
Выключено Не применимо Не применимо Трассы не выделяются. Не применимо
Критически важно "Отрицательные" события: события, указывающие на непредвиденная обработка или условие ошибки. Необработанные исключения, включая следующие, регистрируются:

- OutOfMemoryException
— ThreadAbortException (clR вызывает любой ThreadAbortExceptionHandler)
— StackOverflowException (не может быть перехвачено)
— ConfigurationErrorsException
— SEHException
— Ошибки запуска приложения
— события failfast
— системные зависания
— подозрительные сообщения: трассировки сообщений, которые вызывают сбой приложения.
Администраторы

Разработчики приложений
Ошибка "Отрицательные" события: события, указывающие на непредвиденная обработка или условие ошибки. Произошла неожиданная обработка. Приложение не удалось выполнить задачу должным образом. Однако приложение по-прежнему находится в рабочем состоянии. Регистрируются все исключения. Администраторы

Разработчики приложений
Предупреждение "Отрицательные" события: события, указывающие на непредвиденная обработка или условие ошибки. Возможная проблема возникла или может возникнуть, но приложение по-прежнему работает правильно. Однако он может не работать должным образом. — приложение получает больше запросов, чем позволяют его параметры регулирования.
Очередь для приёма приближается к максимально настроенной вместимости.
— превышено время ожидания.
— Учетные данные отклоняются.
Администраторы

Разработчики приложений
Информация События "Положительные": события, которые помечают успешные вехи Важные и успешные вехи выполнения приложения независимо от того, работает ли приложение должным образом или нет. Как правило, создаются сообщения, полезные для мониторинга и диагностики состояния системы, измерения производительности или профилирования. Такие сведения можно использовать для планирования емкости и управления производительностью:

— создаются каналы.
— создаются прослушиватели конечных точек.
Сообщение входит или покидает систему передачи данных.
— извлекается маркер безопасности.
— параметр конфигурации считывается.
Администраторы

Разработчики приложений

Разработчики продуктов.
Многословный "Положительные" события: события, которые помечают успешные вехи. Генерируются события низкого уровня для пользовательского кода и обслуживающих процессов. Как правило, этот уровень можно использовать для отладки или оптимизации приложений.

— понятный заголовок сообщения.
Администраторы

Разработчики приложений

Разработчики продуктов.
ActivityTracing (Отслеживание активности) Поток событий между действиями обработки и компонентами. Этот уровень позволяет администраторам и разработчикам сопоставлять приложения в одном домене приложения:

— трассировки для границ активности, таких как запуск и остановка.
— трассировки для передачи.
Все
Все Приложение может работать правильно. Все события испускаются. Все предыдущие события. Все

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

Осторожность

Уровни Information, Verbose и ActivityTracing создают много трассировок, что может негативно повлиять на пропускную способность обработки сообщений, если вы использовали все доступные ресурсы на машине.

Настройка трассировки действий и распространения для корреляции

Значение activityTracing, указанное для атрибута switchValue, используется для включения трассировки активностей, которая генерирует трассировки для границ активностей и передачи внутри конечных точек.

Замечание

При использовании определенных функций расширяемости в WCF, может появиться NullReferenceException, если включена трассировка действий. Чтобы устранить эту проблему, проверьте файл конфигурации вашего приложения и убедитесь, что атрибут switchValue для источника трассировки не установлен в activityTracing.

Атрибут propagateActivity указывает, следует ли распространять действие на другие конечные точки, участвующие в обмене сообщениями. Задав это значение true, вы можете принимать файлы трассировки, созданные любыми двумя конечными точками, и наблюдать за тем, как набор трассировок в одной конечной точке перетекался в набор трассировок в другой конечной точке.

Дополнительные сведения о трассировке и распространении действий см. в разделе "Распространение".

propagateActivity и ActivityTracing - оба логических значения применяются к System.ServiceModel TraceSource. Это значение ActivityTracing также применяется ко всем источникам трассировки, включая WCF и пользовательские.

Вы не можете использовать атрибут propagateActivity вместе с пользовательскими источниками трассировки. Для распространения идентификатора действия пользовательского кода убедитесь, что параметр ServiceModel ActivityTracing не задан, а атрибут ServiceModel propagateActivity имеет значение true.

См. также