语义记录IsEnabled总是错误的吗?

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

今天我在WcfTestClient.exe下托管的WCF服务中遇到了问题

当我将断点放入我的EventSourceinheritance类的WriteEvent方法时,IsEnabled()返回false! 所以没有事件写入我的控制台日志进程外:(

启动我的ConsoleEventSink时,我可以看到我的eventSource注册了LogAlways级别而没有注册MatchAnyKeyword属性

有没有想过检查这个问题有什么问题?

提前致谢

您可能在EventSource类中有错误。

您可以分析EventSource以查看它是否已正确定义。 请参阅https://dzimchuk.net/post/troubleshooting-slab-out-of-process-logging

它有一个Nuget包: https ://www.nuget.org/packages/EnterpriseLibrary.SemanticLogging.EventSourceAnalyzer/

尝试为它创建unit testing并检查结果

 [TestClass] public class EventSourceTests { [TestMethod] public void MyEventSourceShouldBeValid() { var analyzer = new EventSourceAnalyzer(); analyzer.Inspect(MyEventSource.Log); } } 

编辑

也可以使用.Net Core的(非官方)端口,请参阅此软件包 。

EventSource和etw记录器基于提供者guid,事件级别和事件关键字进行过滤。 我对consoleeventsink并不熟悉,但是如果你特意告诉接收器注意你的特定提供者,你通常会给它提供者的指导,你只会得到事件。 在您的系统上运行着几千个(可能是数万个)etw提供程序,您不能只在级别和关键字上进行过滤 – 您还必须过滤guid。

一些etw消费者支持提供提供者名称而不是guid,在这种情况下,他们通过散列名称来生成guid。 这通常适用于EventSource,因为这也是EventSource生成其指南的方式。