ETW日志记录与事件处理全解析
1. ETW日志记录线程
ETW(Event Tracing for Windows)中的日志记录线程是非常重要的部分。其主要目的是将事件刷新到日志文件,或者将事件传递给实时消费者,同时跟踪已传递和丢失的事件数量。
当创建ETW会话时,如果该会话不使用循环日志模式,就会启动一个日志记录线程。线程启动后,会将自己链接到代表关联ETW会话的ETW_LOGGER_CONTEXT数据结构,并等待两个主要的同步对象:
- Flush事件 :当会话的缓冲区满时(例如,提供者生成新事件后)、新的实时消费者请求连接时,或者日志记录会话即将停止时,ETW会发出此信号。
- TimeOut定时器 :仅在会话为实时会话,或者用户在调用StartTrace API创建新会话时明确要求时,才会初始化为有效值(通常为1秒)。
当其中一个同步对象发出信号时,日志记录线程会重新激活它们,并检查文件系统是否就绪。若未就绪,线程会继续休眠;否则,开始将属于该会话的每个缓冲区刷新到日志文件或实时消费者。
对于实时会话,日志记录线程会在 %SystemRoot%\System32\LogFiles\WMI\RtBackup 文件夹中创建一个临时的ETL文件。文件名是在实时会话名称前加上 EtwRT 前缀生成的。该文件用于在将临时事件传递给实时消费者之前保存它们,也可存储未在适当时间范围内传递给消费者的丢失事件。实时自动记录器启动时,会从日志文件中恢复丢失的事件并传递给消费者。
日志记录线程是唯一
超级会员免费看
订阅专栏 解锁全文
2777

被折叠的 条评论
为什么被折叠?



