我使用EventSource登录ETW。我们正在使用.Net Framework 4.5。
由于我处于开发的初期,我将在我的EventSource子类中经常更改方法签名。我真的不想每次做出改变时都要增加版本。版本只是一个字节,所以我很快就会用完版本。
有没有办法可以强制ETW识别签名更改而不添加/更改版本属性?
感觉它可能与清单文件的生成有关,但我无法真正找到关于如何在v4.5中完成此操作的大量信息。过去似乎需要手动生成清单文件,现在它以某种方式神奇地生成。
对此的任何帮助将不胜感激。
修改
当我更改签名时,日志仍然看起来像旧签名。例如,如果我的方法看起来像这样
public void MyLogMethod(string name, int id)
稍后,如果我想添加其他参数,例如
public void MyLogMethod(string name, int id, string message)
除非我增加Version属性,否则消息值不会显示在有效内容中。我希望ETW能够识别我更改的签名,而无需更改版本属性。
答案 0 :(得分:2)
ETW是一种强类型的日志记录系统,而EventSource是在其上构建的.NET层。是的,现在EventSource会自动向ETW流注入自己的清单。但您必须使用通过Nuget Feed分发的the latest stable version。作为.NET 4.5的一部分的版本几乎没有错误,缺少一些功能。
最新版本的EventSource在启动期间以及每次创建新的ETL文件时都会向底层ETW提供程序发出清单信息。如果您正在使用Tx LINQpad driver或SfvPerf,您可以看到记录的ETL文件中的第一个事件的事件ID等于64567(据我记得),这是一个EventSource系统事件,它还使用相同的ID来记录其错误消息,因此您可以检查它们以进行诊断。
Version属性的唯一目的是在多个客户端使用不同版本为同一个ETW提供程序提供服务时支持该方案,因此可以根据版本标记对结果跟踪事件进行反序列化。在您的情况下,保留与事件源的ETW清单的先前版本兼容性似乎不是一个问题。