gpt4 book ai didi

.net - PerfView 中没有来自自定义 .Net 4.5 EventSource ETW 提供程序的事件

转载 作者:行者123 更新时间:2023-12-04 04:36:30 24 4
gpt4 key购买 nike

我在我的 ASP.NET WebApi 应用程序中创建了一个 EventSource (WebApiEventSource)(作为 ITraceWriter 实现):

[EventSource(Name = "WebApi")]
public class WebApiEventSource : EventSource
{
public static readonly WebApiEventSource Log = new WebApiEventSource();

[Event(1)]
public void Event(string url, string message)
{
WriteEvent(1, url, message);
}
}

我检查了在运行时调用 EventSource 的方法没有错误。

然后我运行 PerfView 并检查它的日志,它可以看到我的提供者(EventSource):

解析规范 *WebApi
启用提供程序:*WebApi 级别:关键关键字:0x0 选项:无值:Guid:fc7bbb67-1b01-557b-5e0e-c1c4e40b6a24

然后我使用过滤器“*WebApi”运行“collect”,在我的应用程序中执行一些操作并停止它。

但是我的提供者在 etl 文件中没有任何事件! “事件”部分甚至不包含我的提供者的名称。

我错过了什么?

更新:我找到了原因,请参阅下面的答案。

最佳答案

事实证明,事件丢失的原因非常微妙。
为简单起见,我没有提供我所有的代码,只提供我认为重要的部分 - 我正在调用的方法 EventSource.WriteEvent .

有趣的是,如果 EventSource 实现类包含 任何 其他方法 where EventSource.WriteEvent使用相同的 id 调用,那么您将看不到 任何 来自此 EventSource 的事件。这令人难以置信,但确实如此。

所以我的类(class)还有一个我没有使用的 WriteEvent 调用方法:

[EventSource(Name = "WebApi")]
public class WebApiEventSource : EventSource
{
public static readonly WebApiEventSource Log = new WebApiEventSource();

public void Event(string url, string message)
{
WriteEvent(1, url, message);
}

public void Event2(string url, string message)
{
WriteEvent(1, url, message);
}
}

之后,我删除了我的附加方法 (Event2) 我确实在 PerfView 日志中看到了我的事件!

注意:应用 EventAttribute 确实是完全可选的。

我发现的另一个原因是该方法调用 WriteEvent不应该有不是字符串的参数。

关于.net - PerfView 中没有来自自定义 .Net 4.5 EventSource ETW 提供程序的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19680191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com