如何检索应用程序类别以外的事件日志?
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" 的日志?
谢谢
您可能需要使用 EventLogReader
和 EventLogQuery
来实现。
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
执行得非常糟糕。
因此您将不得不使用 EventLogQuery
和 EventLogReader
classes 来读取事件日志。
我正在尝试检索与应用程序不同的类别中的一些事件日志。例如,我想获取 "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" 的日志?
谢谢
您可能需要使用 EventLogReader
和 EventLogQuery
来实现。
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
执行得非常糟糕。
因此您将不得不使用 EventLogQuery
和 EventLogReader
classes 来读取事件日志。