【发布时间】:2017-04-30 12:57:11
【问题描述】:
我有一个跨越许多项目的 C# 解决方案。我创建了一个从 Systme.Diagnostics.Tracing.EventSource 继承的跟踪类,称为 MyCustomEventSource,它处理我的大部分跟踪事件。我想为每个项目创建这个类的子类,以便我可以实现与特定项目相关的事件。
我还在编写一个 ETW 消费者,我可以在其中轻松地监听来自系统不同组件的事件。
但是我的消费者没有正确识别事件:当我监听 MyCustomEventSource 时,每个事件的 EventName 字段被设置为方法的名称,而 FormattedMessage 被设置为 Message 属性。示例:
[Event(1,
Message = "The configuration parameter \"{0}\" was loaded with a value of {1}.",
Level = EventLevel.Informational,
Task = Tasks.Configuration,
Keywords = Keywords.Diagnostics)]
public void ConfigParameterLoaded(string name, string value)
{
WriteEvent(1, name, value);
}
如果我监听 MyCustomEventSource,并且应用调用了 ConfigParameterLoaded,那么我会收到一个名为 ConfigParameterLoaded 的事件,它的 FormattedMessage 是“配置参数“x”被加载,值为 y。”
这很好。
但是,如果我在 MyCustomEventSource 的子类上创建类似的方法并从该子类触发事件,我的 EventName 将始终为“EventSourceMessage”,而 FormattedMessage 将始终为 null。
我认为这可能是因为 System.Diagnostics.Tracing.EventAttribute 没有 AttributeUsage(Inherited=true)。
我的问题是:有没有办法解决这个问题,并在从子类触发事件时获取正确的信息?
【问题讨论】:
-
这是一个完全有效的问题。为什么有人投票结束这个?!
标签: c# etw eventsource