Различия между использованием log4net, ETW и TraceLogging

Я использовал Debug.WriteLine для отладки существующего унаследованного приложения, чтобы найти поток программы. Сейчас я изучаю приложение, основанное на событиях (сообщениях), которое содержит несколько сервисов, которые реагируют на события. Он использует много облачных (например, Azure) ресурсов.

Я пытаюсь понять различные системы ведения журналов ETW (Event Tracing For Windows), TraceLogging, log4Net и т. Д.... Который из них поддерживает регистрацию системных исключений (особенно исключений, поступающих из облачных служб или ресурсов), программных исключений, кодированного ведения журнала так далее...

2 ответа

Решение

С ETW вы также можете захватить данные ядра и посмотреть, как ваш код влияет на процессор, использование диска. Вы также можете захватывать стеки вызовов для событий ETW (стек вызовов для событий режима ядра в Vista, а также события пользовательского режима начиная с Windows 7).

.Net Runtime ETW Provider вызывает исключения, когда вы активируете ведение журнала с ExceptionKeyword ключевое слово. Я уже разместил профиль, который активирует стеки вызовов для исключений, событий загрузки сборки (Un) здесь, в переполнении стека. Здесь вы можете увидеть стек вызовов для исключений.

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

ETW — это система, встроенная в Windows, которая принимает события от поставщика и направляет их любым потребителям, которые в них заинтересованы.

Поставщик идентифицирует свои события с помощью GUID поставщика, уровня события и ключевого слова события (категории) и просто отправляет их в ETW. Если событие никого не интересует, ETW игнорирует его. (Одна из самых важных вещей в ETW — насколько эффективно он может игнорировать события.)

Потребитель создает сеанс прослушивания ETW и сообщает ETW идентификатор GUID, уровень и ключевое слово событий, которые он хочет записать. Затем ETW собирает все события, соответствующие запросу, и отправляет соответствующие события потребителю. Потребитель может попросить ETW поместить события в файл. Потребитель также может попросить ETW доставлять события в режиме реального времени по мере их возникновения. Потребитель также может попросить ETW просто сохранить последние N мегабайт событий в памяти, а затем по запросу сохранить эти события на диск.

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

Основное преимущество ETW заключается в возможности начать использование событий без необходимости взаимодействия с программой, которая создает события. Вы просто говорите ETW: «Пожалуйста, соберите события X, Y и Z», и ETW выясняет, как включить эти события и отправить их в ваш файл. Однако это очень мощная функция, поэтому для нее требуются более высокие привилегии. Кроме того, это требует довольно значительных ресурсов, поэтому мы хотим собирать данные только тогда, когда проводим конкретное расследование (мы не хотим всегда запускать журналы).

Особо следует отметить, что в системе Windows по умолчанию одновременно может выполняться только 64 сеанса сбора журналов. Лимит можно увеличить, изменив раздел реестра и перезагрузив компьютер, но Microsoft хочет сохранить его на низком уровне, чтобы не дать людям сойти с ума от слишком большого количества сеансов, поскольку сеансы используют системные ресурсы.

TraceLogging — это особый вид ETW. В других типах ETW вам нужно выяснить, как декодировать событие, просматривая XML-манифест или файл WPP PDB, и вам нужно отредактировать XML-файл, чтобы добавить новое событие, прежде чем вы сможете его сгенерировать. TraceLogging проще, потому что вам никогда не придется искать что-либо для декодирования события — информация, необходимая для декодирования вашего события, всегда находится прямо в файле журнала ETL. Кроме того, вам не нужно редактировать файл XML, чтобы добавить новое событие — вы просто пишете код для создания события.

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

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

Другие вопросы по тегам