我试图弄清楚方法中的最后一个参数 ( IDictionary<String, String>
)如何EventListener.EnableEvents(EventSource, EventLevel, EventKeywords, IDictionary<String, String>)
影响方法的行为。
我检查了MSDN 文档,但描述不清楚,也没有示例如何使用它。事件的参数是什么?它们是如何在字典中指定的?如果有人能举个例子,那就完美了。
EventListener.EnableEvents 中的IDictionary<String, String>
是命令参数并传递给 EventSource。基本上它是一个内置于 EventSource 中的可扩展机制。例如,自定义事件源可以覆盖 OnEventCommand 并响应任意命令。
System.Diagnostics.Tracing.EventSource 当前支持的命令参数是“ActivitySamplingStartEvent”、“ActivitySampling”和“EtwSessionKeyword”。
这是语义日志记录应用程序块采样和过滤事件文章中有关如何使用它们的示例:
var listener = new ObservableEventListener();
listener.EnableEvents("MyCustomEventSource",
EventLevel.Informational, Keywords.None,
new Dictionary<string, string> {
{ "ActivitySampling", "true" }
});
我找到的最接近这个答案的是MSDN 上的这篇文章。
您正在记录来自应用程序的事件,并且您还希望从未在应用程序中定义但与应用程序相关的事件源捕获事件。例如,您希望在应用程序接收到请求时捕获由 ASP.NET 引发的 RequestStarted 事件。但是,您不想收集所有这些事件,因为这些额外来源生成的数据量会使您的日志存储不堪重负,或者使分析日志信息变得非常困难。要解决此问题,您只需要收集事件的样本,而不是全部,并且还能够过滤从中收集事件的进程。