自定義.NET 4.5的EventSource ETW提供商的事件我在ASP.NET的WebAPI應用程序創建一個EventSource的(WebApiEventSource)(以作爲ITraceWriter的實現):沒有從PerfView
[EventSource(Name = "WebApi")]
public class WebApiEventSource : EventSource
{
public static readonly WebApiEventSource Log = new WebApiEventSource();
[Event(1)]
public void Event(string url, string message)
{
WriteEvent(1, url, message);
}
}
我檢查的EventSource的方法在運行時被調用,沒有錯誤。
然後我跑PerfView並在其日誌檢查,它可以看到我的供應商(EventSource的):
解析規格*的WebAPI 啓用提供者:*的WebAPI級別:嚴重關鍵字:爲0x0選項:無值:GUID: fc7bbb67-1b01-557b-5e0e-c1c4e40b6a24
然後我運行'collect'過濾器「* WebApi」,在我的應用程序中執行一些操作並停止它。
但是在etl文件中沒有任何來自我的提供者的事件! 「事件」部分甚至不包含我的提供商的名稱。
我錯過了什麼?
已更新:我找到了原因,請參閱下面的答案。
如果我的理解正確,你應該讓Event2使用id = 2來表示WriteEvent,例如:WriteEvent(2,url,message)。這是因爲id是唯一的64位標識符,它與WebApi(您的事件源名稱)下的事件2不同。我可能是錯的,如果有的話,請糾正我。 – LosManos
請注意,如果您使用NuGet中的'Microsoft.Diagnostics.Tracing.EventSource',則還可以包含Microsoft EventRegister工具,該工具添加了一個生成目標,該目標檢查這些陷阱中的一些(而不是全部)陷阱。 – Benjol