2013-07-10 71 views
5

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

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

任何输入,非常感谢。

+0

你有这个工作吗?我处于相同的状况,有点失落! – Pedro

回答

8

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事件日志中自动生成事件 。

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

+0

您可能会必须在注册后重新启动事件查看器。 –

+0

即使重新启动事件查看器多次,我也可以在Perfmon中看到我的内容,但不能看到事件查看器 - >创建自定义视图。 – HashTagDevDude

0

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

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

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

编辑:See answer to a similar question

干杯 拉尔斯

+0

Hi Lars,经过相当多的研究和阅读后,我发现有一种方法可以记录事件日志中的事件,并在事件查看器中随同有效载荷解码一起查看它们...请参阅上面的文档... –