.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