`EventListener.EnableEvents` 方法中类型为 `IDictionary<String, String>` 的最后一个参数的目的是什么?

6
我正在尝试弄清楚方法EventListener.EnableEvents(EventSource, EventLevel, EventKeywords, IDictionary<String, String>)中的最后一个参数(IDictionary<String, String>)如何影响该方法的行为。
我已经查看了MSDN文档,但是描述不够清晰,也没有使用示例。事件的参数是什么,并且它们是如何在字典中指定的?如果有人能给出一个示例,那就更好了。

1
你链接的文档中写道:“启用指定事件源的事件,该事件源具有...和匹配参数”。问题仍然存在:事件参数是什么,如何在字典中指定它们? - Stefan Steinegger
2个回答

2
IDictionary<String, String> 在 EventListener.EnableEvents 中是命令参数,并传递给 EventSource。基本上,这是内置于 EventSource 的可扩展性机制。例如,自定义事件源可以覆盖 OnEventCommand 并响应任意命令。
System.Diagnostics.Tracing.EventSource 当前支持的命令参数为 "ActivitySamplingStartEvent"、"ActivitySampling" 和 "EtwSessionKeyword"。
以下是一个示例,展示它们在语义日志应用程序块的“采样和过滤事件”文章中的使用:Sampling and filtering events
var listener = new ObservableEventListener();

listener.EnableEvents("MyCustomEventSource", 
         EventLevel.Informational, Keywords.None,
         new Dictionary<string, string> {
           { "ActivitySampling", "true" }
         });

1

我找到的最接近答案的是MSDN上的这篇文章

您正在记录应用程序中的事件,还希望捕获未在应用程序中定义但与应用程序相关的事件源的事件。例如,您希望在应用程序接收请求时捕获由ASP.NET引发的RequestStarted事件。但是,您不希望收集所有这些事件,因为这些额外来源生成的数据量会使您的日志存储过载或使分析日志信息变得非常困难。为解决此问题,您需要仅收集一部分事件,而不是全部事件,并且还需要能够过滤从中收集事件的进程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接