Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Отслеживание — это публикация специфических сообщений, создаваемых во время выполнения приложения. При использовании трассировки необходимо иметь механизм сбора и записи отправленных сообщений. Сообщения трассировки принимаются слушателями. Цель слушателя заключается в сборе сообщений трассировки, их хранении и маршрутизации. Прослушиватели направляют выходные данные трассировки в соответствующий целевой объект, например журнал, окно или текстовый файл.
Один из таких слушателей, DefaultTraceListener, автоматически создается и инициализируется при включении трассировки. Если вы хотите, чтобы выходные данные трассировки направлялись в любые дополнительные источники, необходимо создать и инициализировать дополнительные прослушиватели трассировки. Создаваемые прослушиватели должны отражать ваши индивидуальные потребности. Например, может потребоваться текстовая запись всех выходных данных трассировки. В этом случае вы создадите прослушиватель, который записал все выходные данные в новый текстовый файл при включении. С другой стороны, вы можете просматривать выходные данные только во время выполнения приложения. В этом случае можно создать прослушиватель, который направил все выходные данные в окно консоли. EventLogTraceListener может направлять выходные данные трассировки в журнал событий, а TextWriterTraceListener может записывать их в поток.
Включение трассировки
Чтобы включить трассировку во время обработки транзакций, необходимо изменить файл конфигурации приложения. Ниже приведен пример.
<configuration>
<system.diagnostics>
<sources>
<source name="System.Transactions" switchValue="Warning">
<listeners>
<add name="tx"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "tx.log" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
System.Transactions лог-файлы записываются в источник с именем "System.Transactions". Можно использовать add
для указания имени и типа прослушивателя трассировки, который вы хотите использовать. В нашем примере конфигурации мы назвали прослушиватель tx и добавили стандартный прослушиватель трассировки .NET Framework (XmlWriterTraceListener) в качестве типа, который мы хотим использовать. Используйте initializeData
для задания имени файла журнала для этого прослушивателя. Кроме того, вы можете использовать полный путь вместо простого имени файла.
Каждому типу сообщения трассировки присваивается уровень, указывающий степень важности. Если уровень трассировки домена приложения равен или ниже уровня типа события, создается это сообщение. Уровень трассировки управляется switchValue
параметром в файле конфигурации. Уровни, которые связаны с диагностическими сообщениями трассировки, определены в следующей таблице.
Уровень трассировки | Описание |
---|---|
Критически важно | Произошли серьезные сбои, такие как следующие: — Ошибка, которая может вызвать немедленную потерю функциональности пользователей. — Событие, требующее от администратора принять меры, чтобы избежать потери функциональных возможностей. — код зависает. — Этот уровень трассировки также может обеспечить достаточный контекст для интерпретации других критически важных трассировок. Это может помочь определить последовательность операций, приводящих к серьезному сбою. |
Ошибка | Произошла ошибка (например, недопустимое поведение конфигурации или сетевого поведения), которая может привести к потере функциональности пользователя. |
Предупреждение | Существует условие, которое в дальнейшем может привести к ошибке или критическому сбою, например, таким как сбой выделения или приближение к лимиту. Обычная обработка ошибок из пользовательского кода (например, прерывание транзакций, время ожидания, сбой проверки подлинности) также может создать предупреждение. |
Информация | Создаются сообщения, полезные для мониторинга и диагностики состояния системы, измерения производительности или профилирования. К ним могут относиться события в течение жизненного цикла транзакций и зачислений, такие как создание или фиксация транзакции, пересечение значительной границы или выделение значительных ресурсов. Затем разработчик может использовать такие сведения для планирования емкости и управления производительностью. |
Коды трассировки
В следующей таблице перечислены коды трассировки, созданные инфраструктурой System.Transactions . В таблице представлены идентификатор трассировки, EventType уровень перечисления для трассы и дополнительные данные, содержащиеся в TraceRecord для трассы. Кроме того, соответствующий уровень трассировки также хранится в TraceRecord.
TraceCode | Тип события | Дополнительные данные в TraceRecord |
---|---|---|
Транзакция создана | Информация | TransactionTraceId |
Продвижение транзакции | Информация | Локальный идентификатор трассировки транзакции, распределенный идентификатор трассировки транзакции |
Создание призывного списка | Информация | TransactionTraceId, EnlistmentTraceId, EnlistmentType (устойчивый/переменный), EnlistmentOptions |
ОтрицательныйОбратныйВызовПривлечения | Предупреждение | Идентификатор_Трассировки_Транзакции, Идентификатор_Трассировки_Участия Обратный вызов (откат принудительный/отменен/в состоянии неопределенности) |
TransactionRollbackCalled | Предупреждение | Идентификатор транзакции (TransactionTraceId) |
Транзакция прервана | Предупреждение | TransactionTraceId |
ТранзакцияПодСомнением | Предупреждение | TransactionTraceId |
СозданаОбластьТранзакции | Информация | TransactionScopeResult, который может быть одним из следующих: — новая транзакция. Транзакция успешно завершена. — Зависимая транзакция передана. — использование текущей транзакции. - Нет транзакции. новый текущий TransactionTraceId |
ОбластьТранзакцииУдалена | Информация | TransactionTraceId текущей "ожидаемой" транзакции области. |
НезавершенныйКонтекстТранзакции | Предупреждение | TransactionTraceId текущей "ожидаемой" транзакции области. |
TransactionScope неправильно вложен | Предупреждение | TransactionTraceId текущей "ожидаемой" транзакции области. |
ИзменениеТекущейТранзакцииВОбластиТранзакций | Предупреждение | старый текущий TransactionTraceId, другой TransactionTraceId |
TransactionScopeTimeout | Предупреждение | TransactionTraceId текущей "ожидаемой" транзакции области. |
ЗависимыйКлонСоздан | Информация | TransactionTraceId, тип созданной зависимой транзакции (отменить, если не завершено/заблокировать подтверждение до завершения) |
ЗависимыйCloneComplete | Информация | TransactionTraceId |
Восстановление завершено | Информация | GUID менеджера ресурсов (из базы) |
Повторное зачисление | Информация | GUID менеджера ресурсов (из базы) |
Сериализованная транзакция | Информация | TransactionTraceId. |
TransactionException | Ошибка | Сообщение об исключении |
Исключение недопустимой операции | Ошибка | Сообщение об исключении |
Внутренняя ошибка | Критически важно | Сообщение об исключении |
TransferEvent | При десериализации транзакции или повышении её из транзакции System.Transactions в распределённую записываются текущий ID активности из ExecutionContext и ID распределённой транзакции. При обратном вызове DTC в управляемый код идентификатор распределенной транзакции задается как ActivityID в ExecutionContext на протяжении обратного вызова. |
|
Настроенная по умолчанию скорректированная пауза ожидания | Предупреждение | Нет дополнительных данных |
Тайм-аут транзакции | Предупреждение | Идентификатор TransactionTraceId транзакции, у которой истекает время ожидания. |
Схема XML для каждого из предыдущих дополнительных элементов данных имеет следующий формат.
Идентификатор следа транзакции
<TransactionTraceIdentifier>
<TransactionIdentifier >
string representation of transaction id
</TransactionIdentifier>
< CloneIdentifier >
the clone id number
</CloneIdentifier>
</TransactionTraceIdentifier>
ИдентификаторТрассировкиПриписки
<EnlistmentTraceIdentifier>
<ResourceManagerId>
string form of guid
</ResourceManagerId>
<TransactionTraceIdentifier>
<TransactionIdentifier >
string representation of transaction id
</TransactionIdentifier>
<CloneIdentifier >
the clone id number
</CloneIdentifier>
<TransactionTraceIdentifier>
<EnlistmentIdentifier>
the enlistment id number
</EnlistmentIdentifier>
</EnlistmentTraceIdentifier>
Идентификатор менеджера ресурсов
<ResourceManagerId>
string form of guid
</ResourceManagerId>
Проблемы с безопасностью при трассировке
Если вы в качестве администратора включаете трассировку, конфиденциальная информация может быть записана в журнал трассировки, который по умолчанию доступен для общедоступного просмотра. Чтобы устранить любую возможную угрозу безопасности, следует рассмотреть возможность хранения журнала трассировки в безопасном расположении, управляемом разрешениями доступа к общей папке и файловой системе.