语义记录:已添加具有相同密钥的项目

Lak*_*ksh 5 logging etw event-listener

我试图使用新的语义应用程序块进行日志记录.根据MSDN,我有测试方法,用于检查EventSource

EventSourceAnalyzer.InspectAll(MyEventSource.Log);
Run Code Online (Sandbox Code Playgroud)

但是当我运行这个测试时,我得到了错误

An item with the same key has already been added 
Run Code Online (Sandbox Code Playgroud)

通常,如果我们使用相同的事件ID,我们会收到此错误,但我为每个方法使用不同的EventID.下面是我的事件源类

EventSource(Name = "SLAB_1.1.1403.1")]
public class MyEventSource : EventSource
{
    public class Keywords
    {
        public const EventKeywords Page = (EventKeywords)1;
        public const EventKeywords DataBase = (EventKeywords)2;
        public const EventKeywords Diagnostic = (EventKeywords)4;
        public const EventKeywords Perf = (EventKeywords)8;
    }

    public class Tasks
    {
        public const EventTask Page = (EventTask)1;
        public const EventTask DBQuery = (EventTask)2;
    }

    private static MyEventSource _log = new MyEventSource();
    private MyEventSource() { }
    public static MyEventSource Log { get { return _log; } }

    [Event(1, Message = "Application Failure: {0}",
    Level = EventLevel.Critical, Keywords = Keywords.Diagnostic)]
    internal void Failure(string message)
    {
        if (this.IsEnabled(EventLevel.Critical, Keywords.Diagnostic))
        {
            this.WriteEvent(1, message);
        }
    }

    [Event(2, Message = "Application Failure1: {0}",
    Level = EventLevel.Critical, Keywords = Keywords.Diagnostic)]
    internal void Failure(string message, string exception)
    {
        if (this.IsEnabled(EventLevel.Critical, Keywords.Diagnostic))
        {
            this.WriteEvent(2, message, exception);
        }
    }

    [NonEvent]
    internal void Failure(string message, Exception ex)
    {
        if (this.IsEnabled(EventLevel.Critical, Keywords.Diagnostic))
        {
            Failure(message, ex.ToString());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 4

方法名称是键,因此由于您有两个名为 Failure 的方法,即使您有不同的参数列表,SLAB 基础结构也会将方法名称作为键添加到字典中。将您的 Failure 方法之一重命名为 Failure2 或类似的名称来解决此问题。