.NET 运行时未显示在 LogNames 中
.NET Runtime does not show up in LogNames
有谁知道为什么“.NET 运行时”事件源的行为不像普通事件源?
var logCheckOne = EventLog.Exists(".NET Runtime");
var logCheckTwo = EventLogSession
.GlobalSession
.GetLogNames()
.Any(s => string.Equals(s, ".NET Runtime", StringComparison.OrdinalIgnoreCase));
这两行代码 return 错误,但在事件查看器中,显然有一个“.NET 运行时”事件源,我可以毫无问题地写入它。
为什么这个坏了?有没有办法获得 'true' 事件源列表?
'LogName' 是 'Application','Source Name' 是 '.NET Runtime',看来你查询的不正确。
尝试:
var logCheckOne = EventLog.SourceExists(".NET Runtime")
你所看到的 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 时,您会感到困惑,它是 ETW 提供程序及其配置通道的混合体,仍然可以记录到应用程序事件日志。
带有 EventLog 及其方法的美好旧世界显示了带有日志名称和来源的“旧”Vista 之前的视图。
foreach(var log in EventLog.GetEventLogs())
{
Console.WriteLine($"{log.LogDisplayName}");
}
- 申请
- 硬件事件
- Internet Explorer
- 安全
- 系统
有关详细信息,请参阅我的文章 https://aloiskraus.wordpress.com/2020/07/20/ms-performance-hud-analyze-eventlog-reading-performance-in-realtime/。
有谁知道为什么“.NET 运行时”事件源的行为不像普通事件源?
var logCheckOne = EventLog.Exists(".NET Runtime");
var logCheckTwo = EventLogSession
.GlobalSession
.GetLogNames()
.Any(s => string.Equals(s, ".NET Runtime", StringComparison.OrdinalIgnoreCase));
这两行代码 return 错误,但在事件查看器中,显然有一个“.NET 运行时”事件源,我可以毫无问题地写入它。
为什么这个坏了?有没有办法获得 'true' 事件源列表?
'LogName' 是 'Application','Source Name' 是 '.NET Runtime',看来你查询的不正确。
尝试:
var logCheckOne = EventLog.SourceExists(".NET Runtime")
你所看到的 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 时,您会感到困惑,它是 ETW 提供程序及其配置通道的混合体,仍然可以记录到应用程序事件日志。
带有 EventLog 及其方法的美好旧世界显示了带有日志名称和来源的“旧”Vista 之前的视图。
foreach(var log in EventLog.GetEventLogs())
{
Console.WriteLine($"{log.LogDisplayName}");
}
- 申请
- 硬件事件
- Internet Explorer
- 安全
- 系统
有关详细信息,请参阅我的文章 https://aloiskraus.wordpress.com/2020/07/20/ms-performance-hud-analyze-eventlog-reading-performance-in-realtime/。