.net 是否可以在ETW中为EventSource子类化?

.net 是否可以在ETW中为EventSource子类化?,.net,system.diagnostics,etw,etw-eventsource,.net,System.diagnostics,Etw,Etw Eventsource,我希望能够声明一个EventSource,它至少有几个默认提供常规日志功能的方法 e、 g 信息() 警告() 错误() 此外,我希望能够在每个服务中定义一个特定的事件源,该事件源继承自提供上述服务的基类。 此时,创建清单的EventRegister.exe应用程序抱怨必须密封事件源 我做错了吗?如果是,我如何实现上述目标? 请参见示例代码: public class ETWBase : EventSource { [Event(1, Channel = Ev

我希望能够声明一个EventSource,它至少有几个默认提供常规日志功能的方法

e、 g

  • 信息()
  • 警告()
  • 错误()
此外,我希望能够在每个服务中定义一个特定的事件源,该事件源继承自提供上述服务的基类。 此时,创建清单的EventRegister.exe应用程序抱怨必须密封事件源

我做错了吗?如果是,我如何实现上述目标? 请参见示例代码:

    public class ETWBase : EventSource
    {
        [Event(1, Channel = EventChannel.Admin, Message = "Info Message: {0}")]
        public void Info(string message) { this.WriteEvent(1); }

        [Event(2, Channel = EventChannel.Debug, Message = "Debug Message: {0}")]
        public void Trace(string message) { this.WriteEvent(2); }

    }

    [EventSource(Name = "ABC-MyEtwServiceEventSource")]
    public sealed class MyEtwServiceEventSource : ETWBase
    {
        public static MyEtwServiceEventSource Log = new MyEtwServiceEventSource();

        [Event(3, Channel = EventChannel.Debug, Message = "My specific Message: {0}")]
        public void Trace(string message) { this.WriteEvent(3); }       
    }

我使用的是最新和最好的Microsoft.Diagnostics.Tracing(pre),据我所知,它支持通道,不同于企业库中的SLAB。

ETWBase应该是抽象的,不应该有由EventAttribute修饰的方法


您可以在文档文件
\u EventSourceUsersGuide.docx
中找到更多信息,如果您正在引用或使用nuget软件包,该文件将添加到您的项目中。

Microsoft.Diagnostics.Tracing(pre)希望密封该类。继承EventSource的类需要密封,如果不将其标记为密封,则无法生成清单。我怀疑这是否会起作用。我如何在一个广泛的系统中跨多个EventSource共享通用方法?我不太确定,我认为我们不能这样做。根据博客:“EventSource类型现在可以实现接口”和“实用程序事件源类型的概念”,稳定版本现在应该允许您想要的(定义为从EventSource派生的抽象类)用于支持在项目中跨多个事件源类型共享代码(例如,用于优化WriteEvent()重载)好的,谢谢你。我意识到了这一发展,但那时我已经将我的ETW库实现为一个NuGet包,其中包含预编写的源代码作为一个部分类,然后可以添加到。