.Net 4.5 EventSource ETW提供程序未显示在提供程序列表中

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

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

任何输入都非常感谢。


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包时,前面提到的构建步骤将为您的应用程序中的每个EventSource生成以下文件:

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

这些文件需要注册到操作系统才能启用通道支持。 为此,请在文件处于其最终部署位置后运行以下命令:

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

执行此注册命令后,从该计算机上的任何进程对MinimalEventSource.Log.Load()的所有后续调用都将自动导致Windows事件日志中的事件。

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


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

EventSource的表现与普通ETW提供者有点不同,因为它不通过win32资源公开其清单,而是发送清单作为其有效载荷的“已知”ETW事件。 这就是为什么perfmon是唯一支持ETW的工具,可以识别从.NET 4.5 EventSource发送的事件。

*你总是可以使用perfmon或其他类似的工具接收事件,但他们不能解码有效载荷,例如传递给WriteEvent的参数。

编辑:请参阅类似问题的答案

干杯拉尔斯

链接地址: http://www.djcxy.com/p/90857.html

上一篇: .Net 4.5 EventSource ETW provider not showing up in provider list

下一篇: Risk of missing events from ETW logging with EventSource