使用自定义事件源时,例如:
[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需要做什么。
答案 0 :(得分:1)
来自公开bool IsEnabled(EventLevel level, EventKeywords keywords)
的源代码:
如果事件具有大于或等于“级别”并且具有一个 启用了“关键字”设置。
请注意,此函数的结果仅近似于 特定事件是否处于活动状态。它只是为了 用作避免在记录时进行昂贵的记录计算的方法 尚未启用,因此有时会返回误报(但 返回false时始终准确)。 EventSources是免费的 附加过滤。
请注意,错误的回报是准确的,因此您需要查看自己的水平和关键字。
@Hans是正确的。我忽略了指出,您需要开始收集事件以将其启用。您可以通过编程方式执行此操作,也可以使用PerfView等一系列工具。
答案 1 :(得分:1)
似乎您需要将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
的文档确实很糟糕。