【问题标题】:What is the purpose of last argument of type `IDictionary<String, String>` in the `EventListener.EnableEvents` method?`EventListener.EnableEvents` 方法中`IDictionary<String, String>` 类型的最后一个参数的目的是什么?
【发布时间】:2015-09-23 08:13:22
【问题描述】:

我试图弄清楚方法EventListener.EnableEvents(EventSource, EventLevel, EventKeywords, IDictionary&lt;String, String&gt;) 中的最后一个参数(IDictionary&lt;String, String&gt;)如何影响方法的行为。

我检查了MSDN documentation,但描述不清楚,也没有示例如何使用它。事件的参数是什么?它们是如何在字典中指定的?如果有人能举个例子,那就完美了。

【问题讨论】:

  • 您链接的文档说“为具有...和匹配参数的指定事件源启用事件”。问题仍然存在:事件的参数是什么?它们是如何在字典中指定的?

标签: c# .net-4.5 slab


【解决方案1】:

我找到的最接近这个问题的答案是this article on MSDN

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

【讨论】:

    【解决方案2】:

    EventListener.EnableEvents 中的IDictionary&lt;String, String&gt; 是命令参数并传递给 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" }
             });
    

    【讨论】:

      猜你喜欢
      • 2022-06-22
      • 2012-12-16
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多