EventSource 中的通道名称

Channel name in EventSource

我有一个应用程序正在编写一些 ETW 事件。事件提供程序使用特定名称创建,例如:

[EventSource(Name = "Test-SourceLogger")]
public class EventSourceLogger : EventSource

然后我在这个日志中有各种事件,其中记录了一些数据。此外,日志是通过创建自定义跟踪侦听器的跟踪写入的。该侦听器然后写入事件。

现在,我想在事件查看器中查看这些事件,但找不到它们。基本上,查看器中左窗格选项的 none 显示日志。我搜索了一下,似乎我们在某个地方必须在注册提供者时在检测清单中指定通道。我使用的是 .NET 4.5 框架,因此我不需要显式注册提供程序。

您需要像这样设置事件属性的频道 属性:

[EventSource(Name = "Samples-EventSourceDemos-EventLog")]
public sealed class MinimalEventSource : EventSource
{
    public static MinimalEventSource Log = new MinimalEventSource();
    [Event(601, Channel = EventChannel.Admin,  Message = "Unhandled exception occurred. Details: {0}", Keywords = EventKeywords.None, Level = EventLevel.Critical)]
    private void UnhandledException(string exceptionMsg)
    {
        this.IsEnabled().Dump();
        this.WriteEvent(601, exceptionMsg);
    }
}

频道 0 表示 None,请参阅 docs

Admin 16 The administrator log channel.
Analytic 18 The analytic channel.
Debug 19 The debug channel.
None 0 No channel specified.
Operational 17 The operational channel.

但是,据我所知,您仍然需要注册您的事件源,请参阅 this doc