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


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

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

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

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

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

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

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

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

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

Если используются точки расширяемости 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>
ms733025.note(ru-ru,VS.100).gifПримечание
Чтобы изменить файл конфигурации проекта службы 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, создается имя файла без расширения. Если реализовать пользовательский прослушиватель, с помощью этого атрибута также можно получать другие данные инициализации, помимо имени файла. Например, с его помощью можно указать идентификатор базы данных.

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

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

ms733025.Caution(ru-ru,VS.100).gifВнимание!
Поскольку прослушиватель System.Diagnostics.XmlWriterTraceListener не является потокобезопасным, источник трассировки может монопольно блокировать ресурсы при выводе трассировки. Если несколько потоков выводят трассировку в источник трассировки, использующий (согласно заданным настройкам) этот прослушиватель, может возникнуть состязание за ресурсы, что приводит к существенному падению производительности. Чтобы устранить эту проблему, реализуйте потокобезопасный пользовательский прослушиватель.

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

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

Уровень трассировки Характер отслеживаемых событий Содержимое отслеживаемых событий Отслеживаемые события Целевая категория пользователей

Off

Нет

Нет

Трассировки не создаются.

Нет

Critical

"Негативные" события: указывающие о непредвиденном состоянии обработки или об ошибке.

В журнал заносятся необработанные исключения, в том числе следующие:

  • OutOfMemoryException

  • ThreadAbortException (среда CLR вызывает ThreadAbortExceptionHandler)

  • StackOverflowException (не может быть перехвачено)

  • ConfigurationErrorsException

  • SEHException

  • Ошибки запуска приложений

  • События Failfast

  • "Зависания" системы

  • Подозрительные сообщения: трассировки сообщений, которые приводят к сбою приложения.

Администраторы

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

Error

"Негативные" события: указывающие о непредвиденном состоянии обработки или об ошибке.

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

Все исключения заносятся в журнал.

Администраторы

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

Warning

"Негативные" события: указывающие о непредвиденном состоянии обработки или об ошибке.

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

  • Количество запросов, получаемых приложением, превышает значение, допустимое его параметрами регулирования.

  • Принимающая очередь близка к заданному максимальному пределу емкости.

  • Превышено время ожидания.

  • Учетные данные отклонены.

Администраторы

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

Information

"Позитивные" события: отмечающие успешно пройденные основные этапы

Успешно пройденные важные этапы выполнения приложения, вне зависимости от того, правильно ли работает приложение.

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

  • Создание каналов.

  • Создание прослушивателей на конечных точках.

  • Вход или выход сообщения из транспорта.

  • Извлечение маркера безопасности.

  • Чтение параметра конфигурации.

Администраторы

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

Разработчики программных продуктов.

Verbose

"Позитивные" события: отмечающие успешно пройденные основные этапы.

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

Как правило, этот уровень можно использовать для отладки или оптимизации приложения.

  • Распознанный заголовок сообщения.

Администраторы

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

Разработчики программных продуктов.

ActivityTracing

События переходов между действиями по обработке и компонентами.

Этот уровень позволяет администраторам и разработчикам коррелировать приложения из одного домена приложений.

  • Трассировки границ действий, например запуск и остановка.

  • Трассировки передач.

Все

All

Приложение может работать надлежащим образом. Создаются все события.

Все вышеперечисленные события.

Все

Каждый уровень трассировки от Verbose до Critical включает все вышестоящие уровни, за исключением уровня "Off". Например, если прослушиватель прослушивает уровень Warning, он получает трассировки, имеющие уровень Critical, Error и Warning. Уровень All включает в себя все события уровней от Verbose до Critical, а также события ActivityTracing (прослеживание действий).

ms733025.Caution(ru-ru,VS.100).gifВнимание!
Уровни Information, Verbose и ActivityTracing создают большое количество трассировок, что может негативно сказаться на производительности в отношении обработки сообщений, если все доступные ресурсы компьютера использованы.

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

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

ms733025.note(ru-ru,VS.100).gifПримечание
При использовании некоторых возможностей расширяемости WCF можно получить исключение NullReferenceException, если включена трассировка действий. Чтобы устранить эту проблему, проверьте файл конфигурации своего приложения: атрибут switchValue для соответствующего источника трассировки не должен иметь значение activityTracing.

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

Дополнительные сведения распространении и трассировке действий см. в разделе Activity Tracing and Propagation.

Оба значения типа Boolean propagateActivity и ActivityTracing применимы к источнику трассировки System.ServiceModel. Значение ActivityTracing также применимо к любому источнику трассировки, включая определенные в WCF и определенные пользователем.

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

См. также

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

Администрирование и диагностика

Другие ресурсы

Трассировка
Практическое руководство. Создание и инициализация прослушивателей трассировки
Создание пользовательского прослушивателя трассировки