我正在编写一个处理Windows ETW事件的应用程序。
我的应用程序创建一个logman会话并配置要写入.etl
日志文件的事件。
我的应用程序读取了这些.etl
文件,对其进行处理,然后将其删除。
问题:此处理步骤可能会失败(请参见下面的代码)。
我需要一种将ETW事件写回.etl文件的机制,以便以后处理。
如何将Microsoft.Diagnostics.Tracing.TraceEvent
对象(通过DynamicTraceEventParser
回调委托获得) back 写入磁盘(理想情况下,返回到.etl
文件) ?)
想到的解决方案:
.etl
文件中-这是理想的解决方案(简体)代码:
// For each .etl file
foreach (string fullFileName in eventFileNames)
{
// Load the .etl file
using (var source = new ETWTraceEventSource(fileFullName))
{
var parser = new DynamicTraceEventParser(source);
parser.All += delegate (TraceEvent traceEvent)
{
bool proccessingSucceeded = ProcessEvent(traceEvent); // Processing code that can fail
if (!proccessingSucceeded)
{
// TODO: figure out a way to write this event back to disk (.etl file) to be processed later
}
};
source.Process();
}
}