Dot-Net-4.5

ETW,.NET 4.5 - 如何寫入事件日誌?

  • January 15, 2013

我試圖圍繞 ETW 以及如何將 t 集成到高性能應用程序中。

我們都知道舊的可怕的 EventLog 是非結構化的(因此不是最優的)API。

現在有一個用於高性能跟踪的新 API - ETW,它在 4.5 中以 EventSource 類的形式在 .NET 端獲得了一個新 API,您可以輕鬆地對其進行子類化(因此不再需要編寫清單)。

這給我留下了許多問題,試圖讓它發揮作用。

  • 目前建議的最佳(根據文件,指南)使用 ETW 並將事件從那裡獲取到事件日誌的方法是什麼?我在這裡有一個必須編寫(性能)事件的應用程序,並且很想使用 ETW;但事件應出現在(自定義)事件日誌中。
  • 有沒有完整的例子?我可以找到一些,但它們都可以追溯到 .NET 4.0 時間並從清單開始。

我嘗試了什麼?我得到了一個 EventSource 工作,但只是未能獲得有關如何從那裡獲得其餘工作下游的正確文件。

由於以下原因,您試圖實現的目標是不可能的;

  • 要將 ETW 事件定向到事件日誌,您需要在清單中指定類型為 Admin、Operational 或一些經典的通道,例如 Application,並使用 wevtutil 註冊它。不幸的是,即使您有清單,您也不能為此使用 EventSource,因為在呼叫 WriteEvent 時,底層實現不會在 EventDescriptor 塊上設置通道字節,例如,您的事件永遠不會被標記為特定通道。
  • EventSource 在後台為避免註冊清單、將其編譯為 win32 資源、將其連結到程序集/dll、註冊等繁瑣過程所做的是從您的 EventSource 實現生成清單並將其作為已知事件發送到允許接收服務解析所有其他事件有效負載,而不是依賴 Windows 基礎結構來獲取清單資訊。據我所知,目前只有 PerfView 支持此功能。

2013 年 8 月,Microsoft.Diagnostics.Tracing.EventSource 1.0.4 beta 在 NuGet 上發布。三大勝利是通道支持、靜態(已安裝)清單支持(進入事件查看器所需的兩件事)和 .NET 4.0 支持。

根據宣布 RTM 的部落格文章,Microsoft.Diagnostics.Tracing.EventSource “支持快速應用程序跟踪到 Windows 事件日誌,包括在生產中”。

引用自:https://stackoverflow.com/questions/14336024