2

我正在使用 SLAB 进程外在我的应用程序中记录 ETW 事件。

今天我在 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 回答