我有一个用例,在UWP中,我需要订阅ETW提供商。每当事件被记录到提供者时,我想拦截该事件并将事件的部分(例如 - Details,LogLevel等)记录到Application Data中的纯文本格式的自定义文件中。
以此提供商为例: Microsoft-Windows-Diagnostics-Networking {36C23E18-0E66-11D9-BBEB-505054503030}
我找到了一种使用LoggingChannel和FileLoggingSession生成ETL文件的方法:
ILoggingChannel loggingChannel = new LoggingChannel("someLoggingChannel", null, new Guid("36C23E18-0E66-11D9-BBEB-505054503030"));
FileLoggingSession session = new FileLoggingSession("someLoggingSession");
session.LogFileGenerated += Session_LogFileGenerated;
session.AddLoggingChannel(loggingChannel, LoggingLevel.Information);
我还找到了一种方法来使用EventSource和EventListener来生成自定义事件,捕获这些事件被触发时,并将其记录到文件中。我按照这里的例子: https://code.msdn.microsoft.com/windowsapps/Logging-Sample-for-Windows-0b9dffd7
但是,我还没有找到订阅ETW提供商的方法(在本例中为Microsoft-Windows-Diagnostics-Networking {36C23E18-0E66-11D9-BBEB-505054503030}),拦截正在写入的ETW事件它并以自定义文件格式记录。
我的用例是我想捕获这些日志并将它们发送到后端进行一些自动处理。后端没有处理ETL文件的能力(后端不是用.NET / C#编写的),这就是为什么我不能只将示例代码中生成的ETL文件发送到后端。
我找到了可能适用于非UWP用例的示例(无法发布链接,因为我没有10个声誉点):
如果我能提供更多详细信息,请与我们联系。
我很感激任何帮助/指针。