System.Diagnostics.Tracing.EventSource.IsEnabled

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


[EventSource(Name = "MyEventSource")]

public partial class CustomEventSource : EventSource

{

}

EventSource 类上有一个 IsEnabled 方法:


EventSource.IsEnabled(eventLevel, eventKeywords)

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


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


倚天杖
浏览 282回答 2
2回答

呼啦一阵风

似乎您需要将一个附加EventListener到您的EventSource才能启用它: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}编辑:我还找到了EvenSource.SendCommand可以EventCommand.Enable作为参数但只ArgumentException为我抛出一个的方法。是的,文件EventSource是真的不好。

大话西游666

从 public 的源代码bool IsEnabled(EventLevel level, EventKeywords keywords):如果启用了大于或等于“级别”并设置了“关键字”之一的事件,则返回 true。请注意,此函数的结果只是特定事件是否处于活动状态的近似值。它仅用于在未打开日志记录时避免昂贵的日志记录计算,因此它有时会返回误报(但在返回假时总是准确的)。EventSources 可以自由进行额外的过滤。请注意,错误返回是准确的,因此您需要查看您的级别和关键字。@Hans 是正确的。我忽略了指出您需要开始收集事件才能启用它们。您可以通过编程方式执行此操作,也可以使用一系列工具(例如 PerfView)。
打开App,查看更多内容
随时随地看视频慕课网APP