【问题标题】:.Net 4.5 EventSource ETW provider not showing up in provider list.Net 4.5 EventSource ETW 提供程序未显示在提供程序列表中
【发布时间】:2013-07-07 19:17:00
【问题描述】:

我一直在努力使用 .NET4.5 的新功能 ETW(EventSource)。我无法使用 perfmon->Data Collector Sets 将其显示在跟踪提供程序列表中。我能够使用 perfview 查看日志。 我能够使用 EventSource 类的静态方法 GenerateManifest 从其生成清单。这将在 EventSource 类中提供 myevents 的清单,但它不包含有关通道的详细信息。

我的问题是如何在为 perfmon 跟踪会话生成清单文件后添加通道特定信息?我还想使用 Perfmon 的跟踪会话来启用提供程序而不是 perfview。

非常感谢任何输入。

【问题讨论】:

  • 你有这个工作吗?我也有同样的情况,有点迷茫!

标签: .net-4.5 etw etw-eventsource


【解决方案1】:

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

注册您的 EventSource

安装 EventSource NuGet 包时,构建步骤 前面提到的为每个生成以下文件 应用程序中的事件源:

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

这些文件需要在操作系统中注册才能启用 渠道支持。为此,您在 文件位于其最终部署位置:

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

一旦执行此注册命令,所有后续调用 MinimalEventSource.Log.Load(),来自该机器上的任何进程,将 自动在 Windows 事件日志中产生事件。

注册后,您应该会在所有读取已安装提供程序的工具中看到它。

【讨论】:

  • 您可能需要在注册后重新启动事件查看器。
  • 我可以在 Perfmon 中看到我的,但看不到事件查看器 -> 创建自定义视图,即使在多次重新启动事件查看器后也是如此。
【解决方案2】:

即使您确实修改了清单,EventSource 实现也会阻止您指定通道。将事件写入 ETW 时,您将传递一个描述符块,其中指定了通道 ID。不幸的是,EventSource 不提供通过属性或其他方式设置此值的方法,并且始终将其设置为零,这意味着不使用任何通道。

EventSource 的行为与普通 ETW 提供程序略有不同,因为它不通过 win32 资源公开其清单,而是发送一个“已知”ETW 事件,并将清单作为其有效负载。这就是为什么 perfmon 是唯一启用 ETW 的工具,它可以识别*从 .NET 4.5 EventSource 发送的事件。

*您始终可以使用 perfmon 或其他类似工具接收事件,但它们无法解码有效负载,例如传递给 WriteEvent 的参数。

编辑:See answer to a similar question

干杯 拉尔斯

【讨论】:

  • 嗨 Lars,经过大量研究和阅读后,我发现有一种方法可以在事件日志中记录事件,并在事件查看器中查看它们以及有效负载解码...请参阅我的文档以上...
猜你喜欢
  • 2012-12-03
  • 2015-06-30
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多