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

时间:2015-11-12 20:07:44

标签: c# event-log

我试图在与Application不同的类别中检索某些事件日志。例如,我想在" 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.

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

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

由于

enter image description here

3 个答案:

答案 0 :(得分:6)

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

        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()));
        }

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:0)

@MatthewG的答案部分正确。 EventLog类可让您根据MSDN中的定义访问管理日志。但是它们实际上显示在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\

下找到的文件夹名称。

您可以通过使用随机名称创建一个新文件夹来验证这一点,并在使用EventLog.GetEventLogs()方法进行查询时发现显示的随机名称。我认为Microsoft的执行效果很差。

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