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

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

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

Внимание

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

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

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

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

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

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

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

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

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

Внимание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Каждый уровень трассировки от Verbose до Critical включает все вышестоящие уровни, за исключением уровня "Off". Например, если прослушиватель прослушивает уровень Warning, он получает трассировки, имеющие уровень Critical, Error и Warning. Уровень All включает в себя все события уровней от Verbose до Critical, а также события 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.

См. также