我试图在与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"?
由于
答案 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)
您可能需要使用EventLogReader
和EventLogQuery
来实现此目标。
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
的执行效果很差。
因此,您将不得不使用EventLogQuery
和EventLogReader
类来读取事件日志。