C# 消耗过去事件的ETW

C# 消耗过去事件的ETW,c#,logging,etw,C#,Logging,Etw,我计划使用ETW,因为它: 构造日志的力 这是低延迟 在另一个进程上使用事件的容量 其思想是使用外部进程(如语义日志应用程序块)使用ETW事件,并将这些事件转发到中心位置 我的问题是。当应用程序继续向ETW发送事件时,如果ETW使用者因任何原因停机,是否有任何方法消耗过去的事件?当您的自定义记录器停机时,将不会记录任何事件。ETW不会存储任何内容,除非您的提供商和记录器之间有会话 我可以为您提供的解决方案是使用和定制记录器。 将跟踪保存到文件中。。。但是请记住,ETW可以在1个非秒内引发20

我计划使用ETW,因为它:

  • 构造日志的力
  • 这是低延迟
  • 在另一个进程上使用事件的容量
其思想是使用外部进程(如语义日志应用程序块)使用ETW事件,并将这些事件转发到中心位置


我的问题是。当应用程序继续向ETW发送事件时,如果ETW使用者因任何原因停机,是否有任何方法消耗过去的事件?

当您的自定义
记录器停机时,将不会记录任何事件。ETW不会存储任何内容,除非您的
提供商
记录器
之间有
会话

我可以为您提供的解决方案是使用和定制
记录器。
将跟踪保存到文件中。。。但是请记住,
ETW
可以在1个非秒内引发20K事件(您将收到BCL事件…)(保持文件小,并快速从故障中恢复…)

编辑

在:

在进程外场景中,如果服务器本身在应用程序写入日志消息和进程外主机持久化消息之间发生故障,或者进程外主机应用程序在持久化消息之前崩溃,则仍可能丢失日志消息


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

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

如果您的消费者停机,提供商可以继续生成跟踪