如何检索应用程序类别以外的事件日志?

How to retrieve event log other than Application category?

我正在尝试检索与应用程序不同的类别中的一些事件日志。例如,我想获取 "Microsoft-Windows-Application Server-Applications/Operational" 中的信息。下面是我的代码

EventLog log = new EventLog("Microsoft-Windows-Application Server-Applications/Operational");
int index = log.Entries.Count - 1;
Debug.WriteLine(log.Entries[index].Message);

但总是显示错误:

The event log 'Microsoft-Windows-Application Server-Applications/Operational' on computer '.' does not exist.

如果我直接使用"Application",那么我可以在应用程序类别中获取日志。

如何获取 "Microsoft-Windows-Application Server-Applications/Operational" 的日志?

谢谢

您可能需要使用 EventLogReaderEventLogQuery 来实现。

EventLogReader reader = new EventLogReader("Microsoft-Windows-Application Server-Applications/Operational");
string message = reader.ReadEvent().FormatDescription();

您可以使用 EventLogQuery 按降序检索结果。

但是,我不太确定为什么这不适用于 EventLog。也许其他人可以帮助澄清这一点。

EventLog class 仅允许您访问 Windows 事件日志。您需要使用 System.Diagnostics.Eventing.Reader 命名空间中的 EventLogReader

        EventLogQuery query = new EventLogQuery("Microsoft-Windows-Application Server-Applications/Operational", PathType.LogName, "*");
        EventLogReader reader = new EventLogReader(query);
        EventRecord eventRecord;
        while ((eventRecord = reader.ReadEvent()) != null)
        {
            Console.WriteLine(String.Format("{0} - {1}",
                eventRecord.TimeCreated,
                eventRecord.FormatDescription()));
        }

@MatthewG 的回答部分正确。 EventLog class 允许您按照 MSDN 中的定义访问管理日志。但它们实际上显示在注册表下找到的文件夹名称 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\

您可以通过创建一个随机名称的新文件夹来验证这一点,您会发现在使用 EventLog.GetEventLogs() 方法查询时显示的是随机名称。有些东西,我认为 Microsoft 执行得非常糟糕。

因此您将不得不使用 EventLogQueryEventLogReader classes 来读取事件日志。