您所看到的 EventLog 实际上是一个复杂的野兽,由许多 ETW(Windows 事件跟踪)提供程序组成。编码
foreach(var log in EventLogSession.GlobalSession.GetLogNames())
{
Console.WriteLine($"{log}");
}
为您提供超过 1000 个条目。这是具有不同通道设置的 ETW 提供程序,它们显示为自 Windows Vista 以来的“新”事件日志。在 Windows Vista 之前,只有事件日志
可能还有一些其他应用程序和一些由其他应用程序创建的自定义日志。数据进入 .evt 文件,其中每个事件日志已在注册表中注册事件源及其资源 dll,用于消息格式化和本地化。
由于 Vista 和更高版本,这已被重新设计,现在“旧”基于注册表的方法仍然存在,但大多数事件日志源进入注册表不再是消息 dll,而是对现在查找的 ETW 提供程序 ID 的引用.
因此,当您枚举 EventLogSession 时,您会感到困惑,EventLogSession 是 ETW 提供程序及其配置的通道的混合体,这些通道仍然可以记录到应用程序事件日志中。
EventLog 及其方法的美好旧世界显示了带有日志名称和源的“旧”pre Vista 视图。
foreach(var log in EventLog.GetEventLogs())
{
Console.WriteLine($"{log.LogDisplayName}");
}
有关更多信息,请参阅我的文章https://aloiskraus.wordpress.com/2020/07/20/ms-performance-hud-analyze-eventlog-reading-performance-in-realtime/。