2

アプリケーションで ETW イベントをログに記録するために、SLAB アウトプロセスを使用しています。

今日、WcfTestClient.exe の下でホストされている WCF サービス内で問題が発生しました

EventSource 継承クラスの WriteEvent メソッドにブレークポイントを設定すると、IsEnabled() は false を返します!!! したがって、アウトプロセスのコンソールログにイベントは書き込まれません:(

ConsoleEventSink を起動すると、eventSource が LogAlways レベルで登録され、MatchAnyKeyword プロパティに None が登録されていることがわかります

この問題の何が問題なのかを確認するアイデアはありますか?

前もって感謝します

4

2 に答える 2

5

クラスでエラーが発生している可能性があります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);
    }
}

編集

.Net Core への (非公式の) ポートも利用できます。このパッケージを参照してください。

于 2016-06-01T07:45:28.780 に答える
1

EventSource および etw ロガーは、プロバイダー GUID、イベント レベル、およびイベント キーワードに基づいてフィルター処理されます。私は consoleeventsink に精通していませんが、通常はプロバイダーの GUID を指定して、特定のプロバイダーに注意を払うようにシンクに具体的に指示した場合にのみ、イベントを取得します。システム上では文字通り数千 (場合によっては数万) の etw プロバイダーが実行されており、レベルとキーワードだけでフィルター処理することはできません。GUID でフィルター処理する必要もあります。

一部の etw コンシューマーは、GUID の代わりにプロバイダー名の提供をサポートしています。この場合、名前をハッシュして GUID を生成します。これは、EventSource がガイドを生成する方法でもあるため、EventSource でうまく機能することがよくあります。

于 2016-06-03T04:06:35.557 に答える