【发布时间】:2015-08-21 08:16:33
【问题描述】:
我打算使用 ETW,因为它:
- 强制构建日志记录
- 低延迟
- 在另一个进程上消费事件的能力
这个想法是使用外部进程(如语义日志应用程序块)来使用 ETW 事件,并将这些事件转发到中心位置。
我的问题是。如果在应用程序继续向 ETW 发送事件时,ETW 消费者因任何原因出现故障,是否有任何方法可以使用过去的事件?
【问题讨论】:
我打算使用 ETW,因为它:
这个想法是使用外部进程(如语义日志应用程序块)来使用 ETW 事件,并将这些事件转发到中心位置。
我的问题是。如果在应用程序继续向 ETW 发送事件时,ETW 消费者因任何原因出现故障,是否有任何方法可以使用过去的事件?
【问题讨论】:
当您的自定义 Recorder 关闭时,不会记录任何事件。 ETW 不会存储任何内容,除非您的 Provider 和 Recorder 之间有一个 Session。
我可以为您提供的解决方案是使用WPR 和您的自定义Recorder。
将跟踪保存到文件中...但请记住ETW 可以在 1 秒内引发 20K 事件(您将收到 BCL 事件...)...(保持文件小,并快速从故障中恢复。 ..)
编辑
如果服务器本身在应用程序写入日志消息和进程外主机保存消息之间发生故障,或者如果进程宿主应用程序在保留消息之前崩溃。
所以正如我所说,使用 2 个应用程序可能会有所帮助...
【讨论】:
实际上,您可以尝试使用离线 ETW 会话。它将二进制跟踪存储到磁盘中的文件中,然后您的消费者可以从该文件中获取数据。
如果您的消费者出现故障,提供者可以继续生成跟踪。
【讨论】: