Windows事件日志

3

我正在开发一个应用,可以从多个Windows系统中捕获事件日志(安全)。我有一个处理程序,可以处理EntryWritten事件。我能够将Event Viewer中的大多数字段映射到.net中的EntryWrittenEventArgs条目。但是,我似乎找不到在Event Viewer中显示的Level、OpCode和Task Category字段的映射。有什么方法可以在vb.net或c#中获取这些字段吗?谢谢

1个回答

3
System.Diagnostics 命名空间中的 EventLog 类没有包含 LevelOpCodeTask 字段。但是,在 System.Diagnostics.Eventing.Reader 命名空间中有一个名为 EventRecord 的类,可以返回这些字段。请注意,该命名空间主要用于从远程计算机检索事件日志。虽然您也可以将其用于获取本地计算机上的日志,但它会打开到系统的本地管道,使其比 EventLog 类更慢。如果确实需要访问这些字段,通常会使用以下方法:
    private void LoadEventLogs()
    {
        List<EventRecord> eventLogs = new List<EventRecord>();

        EventLogSession session = new EventLogSession();

        foreach (string logName in session.GetLogNames())
        {
            EventLogQuery query = new EventLogQuery(logName, PathType.LogName);
            query.TolerateQueryErrors = true;
            query.Session = session;

            EventLogWatcher logWatcher = new EventLogWatcher(query);
            logWatcher.EventRecordWritten += 
                   new EventHandler<EventRecordWrittenEventArgs>(LogWatcher_EventRecordWritten);

            try
            {
                logWatcher.Enabled = true;
            }
            catch (EventLogException) { }


            // This is how you'd read the logs
            //using (EventLogReader reader = new EventLogReader(query))
            //{
            //    for (EventRecord eventInstance = reader.ReadEvent(); eventInstance != null; eventInstance = reader.ReadEvent())
            //    {
            //        eventLogs.Add(eventInstance);
            //    }
            //}
        }
    }

以下是 LogWatcher_EventRecordWritten 事件处理程序:

 private void LogWatcher_EventRecordWritten(object sender, EventRecordWrittenEventArgs e)
    {
        var level = e.EventRecord.Level;
        var task = e.EventRecord.TaskDisplayName;
        var opCode = e.EventRecord.OpcodeDisplayName;
        // Other properties
    }

请注意,我将logWatcher.Enabled = true;语句包装在一个try-catch块中,因为并非所有源都允许写入监听器(安全性应该很好)。如果需要,注释部分向您展示了读取所有日志的示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接