【问题标题】:Channel name in EventSourceEventSource 中的频道名称
【发布时间】:2018-12-22 11:16:47
【问题描述】:

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

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

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

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

  • 是否需要指定频道名称?
  • 如何在 如果我没有事件查看器?没有默认频道吗 他们被推到哪里去了?
  • 我尝试通过 perfview 查看事件,我 查看我的应用程序的事件。在转储事件的 xml 时,我看到 频道属性设置为0。如何查看名称 对应每个频道号?

【问题讨论】:

    标签: c# events trace system.diagnostics etw


    【解决方案1】:

    您需要像这样设置 Event 属性的 Channel 属性:

    [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);
        }
    }
    

    Channel 0 表示无,见docs:

    Admin 16 管理员日志通道。
    Analytic 18 分析通道。
    调试 19 调试通道。
    无 0 未指定通道。
    Operational 17 运营渠道。

    但是,AFAIK,您仍然需要注册您的事件源,请参阅this doc

    【讨论】:

    • 感谢您的回复。我检查了提供通道支持的 nuget 数据包 1.1.28,它通过 Microsoft.Diagnostics.Tracing 进行。当我的应用程序使用 System.Diagnostics.Tracing 时。任何方式都可以通过它添加频道?并且不添加频道,事件将不会在事件查看器中可见?
    • @user1915032 更新解决方案到.net 4.6,这里收件箱类支持频道
    • 正如@magicandre1981 所写,您必须更新到 4.6+ 或使用 Nuget 类
    • @PeterBons 频道名称可以改吗?比如,如果我想有一个频道名称作为应用程序,是否可以从上面做到这一点?
    • 另外,在添加上述名称中的频道后,清单文件会在 标记中获得类似 Samples-EventSourceDemos-EventLog\Admin 的条目。但这在事件查看器中仍然不可见。这里有什么线索吗?
    猜你喜欢
    • 2014-10-13
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 2021-04-04
    • 2012-11-14
    • 2022-01-22
    • 2012-11-01
    • 2020-01-17
    相关资源
    最近更新 更多