ETW消耗过去的事件

时间:2015-08-21 08:16:33

标签: c# logging etw

我打算使用ETW,因为它:

  • 强制构建日志记录
  • 低延迟
  • 在另一个进程上使用事件的能力

我们的想法是使用语义日志应用程序块等外部流程来使用ETW事件,并将这些事件转发到中心位置。

我的问题是。如果ETW消费者因应用程序继续向ETW发送事件而出于任何原因而失败,有没有办法消耗过去的事件?

2 个答案:

答案 0 :(得分:2)

在您的自定义Recorder关闭时,没有任何内容会记录这些事件。除非您的SessionProvider之间有Recorder,否则ETW不会存储任何内容。

我可以为您提供的解决方案是使用WPR和您的自定义Recorder。 将跟踪保存到文件中...但请记住ETW可以在1秒内提高20K事件(您将收到BCL事件......)...(保持文件小,并从失败很快......)

修改

this article中:

  

如果服务器本身在应用程序写入日志消息的时间与进程外主机持久保留消息的时间之间发生故障,或者如果出现故障,则仍可能在进程外方案中丢失日志消息进程主机应用程序在保留消息之前崩溃。

正如我所说,使用2个应用程序可能会有所帮助...

答案 1 :(得分:0)

实际上,您可以尝试使用离线ETW会话。它将二进制跟踪存储到磁盘中的文件中,然后您的使用者可以从该文件中获取数据。

如果您的消费者不满意,提供商可能会继续生成跟踪。