为了账号安全,请及时绑定邮箱和手机立即绑定

System.Diagnostics.Tracing.EventSource.IsEnabled

System.Diagnostics.Tracing.EventSource.IsEnabled

C#
倚天杖 2021-11-07 20:32:31
使用自定义事件源时,例如:[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。
查看完整描述

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

似乎您需要将一个附加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是真的不好。


查看完整回答
反对 回复 2021-11-07
?
大话西游666

TA贡献1817条经验 获得超14个赞

从 public 的源代码bool IsEnabled(EventLevel level, EventKeywords keywords)

如果启用了大于或等于“级别”并设置了“关键字”之一的事件,则返回 true。

请注意,此函数的结果只是特定事件是否处于活动状态的近似值。它仅用于在未打开日志记录时避免昂贵的日志记录计算,因此它有时会返回误报(但在返回假时总是准确的)。EventSources 可以自由进行额外的过滤。

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

@Hans 是正确的。我忽略了指出您需要开始收集事件才能启用它们。您可以通过编程方式执行此操作,也可以使用一系列工具(例如 PerfView)。


查看完整回答
反对 回复 2021-11-07
  • 2 回答
  • 0 关注
  • 281 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信