2016-06-01 67 views
1

我正在使用SLAB進程外在我的應用程序中記錄ETW事件。語義記錄IsEnabled si總是假嗎?

今天我主持下WcfTestClient.exe

當我把斷點到我的EventSource繼承類的WriteEvent方法WCF服務中的問題,的IsEnabled()返回false! 因此,沒有事件被寫入到我的控制檯註銷的進程:(

當開始我ConsoleEventSink,我可以看到一個帶有LogAlways水平,無,MatchAnyKeyword財產

任何想法檢查什麼註冊我的EventSource是錯誤的,這個問題?

在此先感謝

回答

4

你可能有一個錯誤在你EventSource類。

您可以分析EventSource來查看它是否被正確定義。見https://dzimchuk.net/post/troubleshooting-slab-out-of-process-logging

有一個NuGet包吧:https://www.nuget.org/packages/EnterpriseLibrary.SemanticLogging.EventSourceAnalyzer/

嘗試爲它創造一個單元測試和檢查結果

[TestClass] 
public class EventSourceTests 
{ 
    [TestMethod] 
    public void MyEventSourceShouldBeValid() 
    { 
     var analyzer = new EventSourceAnalyzer(); 

     analyzer.Inspect(MyEventSource.Log); 
    } 
} 
1

的EventSource和ETW記錄器是基於供應商的GUID,事件級別過濾,和事件關鍵字。我對consoleeventsink並不熟悉,但是如果您專門告訴接收器關注您的特定提供者,通常只需提供提供者的指導,您就只能獲得事件。在你的系統上有成千上萬(也許數以萬計)的etw提供程序,你不能只在關卡和關鍵字上進行過濾 - 你也必須對guid進行過濾。

一些etw消費者支持提供提供者名稱而不是guid,在這種情況下,他們通過散列名稱來生成guid。這通常適用於EventSource,因爲這也是EventSource生成其指南的方式。