当使用自定义事件源时,例如:
[EventSource(Name = "MyEventSource")]
public partial class CustomEventSource : EventSource
{
}在IsEnabled类上有一个EventSource方法:
EventSource.IsEnabled(eventLevel, eventKeywords)https://msdn.microsoft.com/en-us/library/hh393402(v=vs.110).aspx
此方法如何确定级别和关键字的事件是否“启用”?这方面似乎没有任何可靠的文档。在我的实现中,方法返回false,我不确定需要做什么才能使它返回true。
发布于 2018-07-31 11:21:38
似乎您需要将一个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的文档非常糟糕。
发布于 2018-07-31 10:56:06
来自公共bool IsEnabled(EventLevel level, EventKeywords keywords)的源代码
如果启用了大于或等于“级别”并具有“关键字”集之一的事件,则返回true。 请注意,此函数的结果只是对某个特定事件是否活动的近似。它只是用来避免在日志不打开的情况下为日志记录进行昂贵的计算,因此有时会返回假阳性(但返回false时总是准确的)。EventSources可以自由地进行额外的过滤。
请注意,错误返回是准确的,所以您需要查看您的级别和关键字。
@汉斯是对的。我忽略了指出,您需要开始收集事件,以便启用它们。您可以通过编程方式这样做,也可以使用一系列工具,如PerfView。
https://stackoverflow.com/questions/51611353
复制相似问题