首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Diagnostics.Tracing.EventSource.IsEnabled是如何工作的?

System.Diagnostics.Tracing.EventSource.IsEnabled是如何工作的?
EN

Stack Overflow用户
提问于 2018-07-31 10:35:19
回答 2查看 3K关注 0票数 4

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

代码语言:javascript
复制
[EventSource(Name = "MyEventSource")]
public partial class CustomEventSource : EventSource
{
}

在IsEnabled类上有一个EventSource方法:

代码语言:javascript
复制
EventSource.IsEnabled(eventLevel, eventKeywords)

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-31 11:21:38

似乎您需要将一个EventListener附加到您的EventSource以启用它:

代码语言:javascript
复制
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的文档非常糟糕。

票数 2
EN

Stack Overflow用户

发布于 2018-07-31 10:56:06

来自公共bool IsEnabled(EventLevel level, EventKeywords keywords)的源代码

如果启用了大于或等于“级别”并具有“关键字”集之一的事件,则返回true。 请注意,此函数的结果只是对某个特定事件是否活动的近似。它只是用来避免在日志不打开的情况下为日志记录进行昂贵的计算,因此有时会返回假阳性(但返回false时总是准确的)。EventSources可以自由地进行额外的过滤。

请注意,错误返回是准确的,所以您需要查看您的级别和关键字。

@汉斯是对的。我忽略了指出,您需要开始收集事件,以便启用它们。您可以通过编程方式这样做,也可以使用一系列工具,如PerfView。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51611353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档