c# - EventSource - 无法获取要应用的方法签名更改

标签 c# .net etw-eventsource

我正在使用 EventSource 登录 ETW。我们正在使用 .Net Framework 4.5。

由于我正处于开发初期,我将在我的 EventSource 子类中经常更改方法签名。我真的不想每次进行更改时都必须增加版本。版本只有一个字节,所以我很快就会用完版本。

有没有办法可以强制 ETW 识别签名更改而不添加/更改版本属性?

感觉这可能与 list 文件的生成有关,但我确实找不到很多关于 v4.5 中如何完成此操作的信息。过去似乎需要手动生成 list 文件,现在它以某种方式神奇地生成了。

对此的任何帮助将不胜感激。

编辑:

当我更改签名时,日志看起来仍然像旧签名。例如,如果我的方法如下所示

public void MyLogMethod(string name, int id)

稍后,如果我想添加另一个参数,例如

public void MyLogMethod(string name, int id, string message)

除非我增加版本属性,否则消息值不会显示在有效负载中。我希望 ETW 能够识别我更改后的签名,而无需更改版本属性。

最佳答案

ETW 是一个强类型日志系统,EventSource 是构建在其之上的 .NET 层。是的,现在 EventSource 正在自动将其自己的 list 注入(inject) ETW 流中。但您必须使用通过 Nuget feed 分发的 the latest stable version。该版本是 .NET 4.5 的一部分,几乎没有错误,并且缺少一些功能。

最新版本的 EventSource 在启动期间以及每次创建新的 ETL 文件时都会将 list 信息发送到底层 ETW 提供程序中。如果您使用 Tx LINQpad driverSfvPerf ,您可以看到记录的 ETL 文件中的第一个事件的事件 id 等于 64567 (据我记得),这是一个 EventSource 系统事件,它也使用相同的 id 来记录其错误消息,以便您可以检查这些消息以进行诊断。

版本属性的唯一目的是支持当您有多个客户端使用不同版本来提供同一 ETW 提供程序时的场景,因此结果跟踪事件可能会根据版本标记进行反序列化。就您而言,为您的事件源保留 ETW list 的早期版本之间的兼容性似乎不是问题。

关于c# - EventSource - 无法获取要应用的方法签名更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29402747/

相关文章:

c# - ItextSharp 不显示日语字体

c# - 反序列化直到运行时才知道的对象

c# - 获取本地网络服务器上所有 UNC 共享文件夹的列表

c# - 缩放和选择不适用于具有时间类型的 x 轴的 C# 图表

.net-4.5 - 为什么在 EventSource 的子类上实现接口(interface)会在运行时抛出异常?

c# - 我应该使用 WCF 还是原始套接字?

c# - 更改日期时间格式

c# - 将阻塞调用包装为异步以实现更好的线程重用和响应式 UI

events - ETW EventSource 未在 Windows Server 上记录事件

c# - 如何使用 TraceEvent 库捕获进程名称?