System.Diagnostics.Tracing.EventSource.IsEnabled 如何工作?

Gle*_*mas 5 .net c# trace etw

使用自定义事件源时,例如:

\n\n
[EventSource(Name = "MyEventSource")]\npublic partial class CustomEventSource : EventSource\n{\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

EventSource 类中有一个 IsEnabled 方法:

\n\n
EventSource.IsEnabled(eventLevel,\xe2\x80\x82eventKeywords)\n
Run Code Online (Sandbox Code Playgroud)\n\n

https://msdn.microsoft.com/en-us/library/hh393402(v=vs.110).aspx

\n\n

此方法如何确定该事件对于级别和关键字是否“已启用”?似乎没有任何关于此的可靠文档。在我的实现中,该方法返回 false,我不确定需要做什么才能使其返回 true。

\n

Fre*_*gar 2

似乎您需要附加一个来启用它EventListenerEventSource

class CustomEventListener : EventListener
{
    protected override void OnEventWritten(EventWrittenEventArgs eventData)
    {
    }
}

void Main() 
{
    var src = new CustomEventSource();
    var listener = new CustomEventListener();
    Console.WriteLine(src.IsEnabled(EventLevel.LogAlways, EventKeywords.None)); // false
    listener.EnableEvents(src, EventLevel.Error);

    Console.WriteLine(src.IsEnabled(EventLevel.LogAlways, EventKeywords.None)); // true
    Console.WriteLine(src.IsEnabled(EventLevel.Critical, EventKeywords.None)); // true
    Console.WriteLine(src.IsEnabled(EventLevel.Verbose, EventKeywords.None)); // false
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我还找到了EvenSource.SendCommand可以作为EventCommand.Enable参数的方法,但这只ArgumentException为我抛出一个。是的,文档EventSource确实糟糕。