Поставщик .Net 4.5 EventSource ETW не отображается в списке поставщиков

Я работаю над использованием новой функции .NET4.5 ETW (EventSource). У меня возникли проблемы с его отображением в списках поставщиков трассировки с помощью perfmon->Data Collector Sets. Я смог увидеть журналы с помощью perfview. Мне удалось сгенерировать манифест из класса EventSource, используя его статический метод GenerateManifest. Это предоставит манифест myevents в классе EventSource, но не содержит сведений о каналах.

Мой вопрос заключается в том, как добавить конкретную информацию о канале после создания файла манифеста для сеанса трассировки perfmon? Я также хотел бы использовать сеанс трассировки Perfmon, чтобы включить поставщика вместо perfview.

Любой вклад очень ценится.


person Rajesh B    schedule 10.07.2013    source источник
comment
у тебя это работает? Я в такой же ситуации и немного потерян!   -  person Pedro    schedule 13.07.2013


Ответы (2)


MS выпустила пакет Nuget, который регистрирует класс EventSource после сборки:

http://blogs.msdn.com/b/dotnet/archive/2013/08/09/announcing-the-eventsource-nuget-package-write-to-the-windows-event-log.aspx

Регистрация источника событий

Когда вы устанавливаете пакет NuGet EventSource, на ранее упомянутом этапе сборки создаются следующие файлы для каждого EventSource в вашем приложении:

<AssemblyName>.<EventSourceTypeName>.etwManifest.man
<AssemblyName>.<EventSourceTypeName>.etwManifest.dll.

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

wevtutil.exe im <EtwManifestManFile> /rf:"<EtwManifestDllFile>" /mf:"<EtwManifestDllFile>"

После выполнения этой команды регистрации все последующие вызовы MinimalEventSource.Log.Load() из любого процесса на этом компьютере автоматически приведут к событиям в журнале событий Windows.

После регистрации вы должны увидеть его во всех инструментах, которые читают установленных провайдеров.

person magicandre1981    schedule 14.08.2013
comment
Возможно, вам придется перезапустить средство просмотра событий после регистрации. - person Eric MSFT; 26.02.2015
comment
Я вижу свой внутри Perfmon, но не вижу Event Viewer -> Create Custom View, даже после многократного перезапуска Event Viewer. - person HashTagDevDude; 30.07.2015

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

EventSource ведет себя немного иначе, чем обычные поставщики ETW, поскольку он не предоставляет свой манифест через ресурс win32, а отправляет «известное» событие ETW с манифестом в качестве полезной нагрузки. Вот почему perfmon — единственный инструмент с поддержкой ETW, который распознает* события, отправленные из .NET 4.5 EventSource.

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

РЕДАКТИРОВАТЬ: См. ответ на аналогичный вопрос

Привет Ларс

person Lars Skovslund    schedule 14.07.2013
comment
Привет, Ларс! После долгих исследований и чтения я нашел способ регистрировать события в журнале событий и просматривать их в средстве просмотра событий вместе с декодированием полезной нагрузки... см. мой документ выше... - person Suneet Nangia; 19.07.2013