是否有可能在ETW中继承EventSource?

时间:2013-09-25 10:55:08

标签: .net system.diagnostics etw etw-eventsource

我希望能够声明一个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),据我所知,它支持Channels,而不像企业库中的SLAB。

1 个答案:

答案 0 :(得分:3)

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

如果您引用Event SourceEvent Source Samples nuget包,可以在文档文件_EventSourceUsersGuide.docx中找到更多信息,这些信息将添加到您的项目中。