Настройка трассировки
В этом разделе описывается, как включить трассировку, настроить создание трассировки источниками трассировки и задать уровни трассировки, задать распространение и трассировку действий для поддержки сквозной корреляции трассировки, а также настроить доступ прослушивателей трассировки к трассировкам.
Рекомендации по настройке трассировки в рабочей и отладочной среде см. в разделе Рекомендуемые параметры для трассировки и ведения журналов сообщений.
Включение трассировки
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>
Примечание |
---|
Чтобы изменить файл конфигурации проекта службы 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
источника трассировки. Доступные уровни трассировки приведены в следующей таблице.
Уровень трассировки | Характер отслеживаемых событий | Содержимое отслеживаемых событий | Отслеживаемые события | Целевая категория пользователей |
---|---|---|---|---|
Off |
Нет |
Нет |
Трассировки не создаются. |
Нет |
Critical |
"Негативные" события: указывающие о непредвиденном состоянии обработки или об ошибке. |
В журнал заносятся необработанные исключения, в том числе следующие:
|
Администраторы Разработчики приложений |
|
Error |
"Негативные" события: указывающие о непредвиденном состоянии обработки или об ошибке. |
Возникло непредвиденное состояние обработки. Приложению не удалось выполнить задачу требуемым образом. Впрочем, приложение все еще работает. |
Все исключения заносятся в журнал. |
Администраторы Разработчики приложений |
Warning |
"Негативные" события: указывающие о непредвиденном состоянии обработки или об ошибке. |
Возникла (или может возникнуть) проблема, но приложение все же работает надлежащим образом. Впрочем, его правильное выполнение может прекратиться. |
|
Администраторы Разработчики приложений |
Information |
"Позитивные" события: отмечающие успешно пройденные основные этапы |
Успешно пройденные важные этапы выполнения приложения, вне зависимости от того, правильно ли работает приложение. |
Как правило, создаются сообщения, полезные для мониторинга и диагностики состояния системы, измерений производительности или профилирования. Эту информацию можно использовать для планирования загрузки и управления производительностью.
|
Администраторы Разработчики приложений Разработчики программных продуктов. |
Verbose |
"Позитивные" события: отмечающие успешно пройденные основные этапы. |
Создаются события низкого уровня как для пользовательского кода, так и для обслуживания. |
Как правило, этот уровень можно использовать для отладки или оптимизации приложения.
|
Администраторы Разработчики приложений Разработчики программных продуктов. |
ActivityTracing |
События переходов между действиями по обработке и компонентами. |
Этот уровень позволяет администраторам и разработчикам коррелировать приложения из одного домена приложений.
|
Все |
|
All |
Приложение может работать надлежащим образом. Создаются все события. |
Все вышеперечисленные события. |
Все |
Каждый уровень трассировки от Verbose до Critical включает все вышестоящие уровни, за исключением уровня "Off". Например, если прослушиватель прослушивает уровень Warning, он получает трассировки, имеющие уровень Critical, Error и Warning. Уровень All включает в себя все события уровней от Verbose до Critical, а также события ActivityTracing (прослеживание действий).
Внимание! |
---|
Уровни Information, Verbose и ActivityTracing создают большое количество трассировок, что может негативно сказаться на производительности в отношении обработки сообщений, если все доступные ресурсы компьютера использованы. |
Настройка распространения и трассировки действий для корреляции
Для атрибута switchValue можно задать значение activityTracing, чтобы включить трассировку действий, создающую трассировку для границ действий и передач в пределах конечных точек.
Примечание |
---|
При использовании некоторых возможностей расширяемости WCF можно получить исключение NullReferenceException, если включена трассировка действий. Чтобы устранить эту проблему, проверьте файл конфигурации своего приложения: атрибут switchValue для соответствующего источника трассировки не должен иметь значение activityTracing. |
Атрибут propagateActivity указывает, должно ли действие распространяться на другие конечные точки, участвующие в обмене сообщениями. Если присвоить ему значение true, можно с помощью файлов трассировки, созданных любыми двумя конечными точками, проследить прохождение набора трассировок от одной конечной точки до набора трассировок на другой конечной точке.
Дополнительные сведения распространении и трассировке действий см. в разделе Activity Tracing and Propagation.
Оба значения типа Boolean propagateActivity
и ActivityTracing
применимы к источнику трассировки System.ServiceModel. Значение
ActivityTracing
также применимо к любому источнику трассировки, включая определенные в WCF и определенные пользователем.
Атрибут propagateActivity нельзя использовать для пользовательских источников трассировок. Для распространения идентификатора действия пользовательского кода необходимо убедиться, что ServiceModel ActivityTracing не задано, тогда как ServiceModel propagateActivity имеет значение true.
См. также
Основные понятия
Администрирование и диагностика
Другие ресурсы
Трассировка
Практическое руководство. Создание и инициализация прослушивателей трассировки
Создание пользовательского прослушивателя трассировки