声明:我贡献在微软
您内部TraceEvent可以追加到使用EVENT_TRACE_FILE_APPEND_MODE一个ETW文件,TraceEvent今天不支持。我们可以添加它,但是我可以看到暴露API的更多问题。
TL; DR - 完整的ETW会话及其元数据是登录到每个文件的内容,每个会话可以有不同的选项,例如时钟分辨率,例如可能会导致微妙的时间戳错误,在某些时候引起你的不满。
这是我的建议。我已经进入了睡眠阶段,但是您会放入一些逻辑来决定如何轮换文件(例如,在您的IIS实例刷新时保持跟踪)。
var _etwSession = new TraceEventSession("MyEtwLog", @"C:\Logs\MyEtwLog." + MyTimestamp + ".etl");
_etwSession.EnableProvider(new Guid("MyGuid"), TraceEventLevel.Always);
Thread.Sleep(1000 * 60);
_etwSession.SetFileName(@"C:\Logs\MyEtwLog" + timestamp + ".etl");
一点背景:
ETW文件是二进制的消费者数据(日志信息),然后通过的元数据,每一个日志信息自由获取ETW子系统提供的。像ThreadID,逻辑处理器编号,是内核还是用户模式,最后但最重要的是时间戳,这实际上是一个取决于处理器频率的值。
除了上面的内容,ETW文件“rundown”,也就是它像操作系统的状态一样,也会在会话开始和结束时刷新到文件。尽管事实上大多数消费者认为ETW日志就像是简单的日志,但它们并不是那种类型。它们与跟踪时间密切相关(记住ETW主要用于Windows Kernel团队在开始时的性能分析)。最近在这方面情况有所改善,这样文件就可以得到充分的独立处理,并且很可能出于您的目的。
但我可以想象很多情况下追加到同一个文件是不是一个好主意。
哦,还有一个大的。 ETW文件每次从头到尾按顺序读取。这是它会不断增长,你不能在中间读取它,至少不以支持的方式阅读:-)
最后你还是不想追加,因为想象你写一个日志文件foo。etl,那么你去购买一个屁股新的处理器,并追加到这个日志文件中,你在前一个会话中收集的所有时间戳将会被一些数字忽略。
你有没有试过** TraceEventSessionOptions.Attach **? – magicandre1981 2014-08-27 17:38:48
我试过所有三个选项都没有成功。 – 2014-08-28 07:40:40