2013-07-10 116 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,經過相當多的研究和閱讀後,我發現有一種方法可以記錄事件日誌中的事件,並在事件查看器中隨同有效載荷解碼一起查看它們...請參閱上面的文檔... –