如何使用给定的事件ID查询事件日志详细信息?

时间:2010-03-17 13:13:06

标签: c# events

  1. 如何知道是否记录了特定事件(给定事件ID,时间和节点作为输入)? [在这种情况下,我知道只会记录一个事件]
  2. 如果记录了该事件,我如何获取事件描述,日志名称等详细信息。
  3. 例如,我想查询节点“应用程序和服务日志”下的事件>微软> Windows> groupPolicy>操作,事件ID为5315,时间为当前时间。

2 个答案:

答案 0 :(得分:19)

如果您要从新样式的Windows EventLogs查询事件,则会有一些新的扭曲。

  1. 您必须使用System.Diagnostics.Eventing.Reader命名空间中的类来阅读新事件。
  2. 您的查询将采用Xpath格式,因此时间值很棘手,请参阅EventLogQuery definition的msdn。
  3. 您的程序将遇到访问问题,请准备好模拟日志记录计算机上EventReaders AD组中包含的用户。
  4. 此示例显示了一些新的访问方法,欢呼。

            string eventID = "5312";
            string LogSource = "Microsoft-Windows-GroupPolicy/Operational";  
            string sQuery = "*[System/EventID=" + eventID + "]";
    
            var elQuery = new EventLogQuery(LogSource, PathType.LogName, sQuery);
            var elReader = new System.Diagnostics.Eventing.Reader.EventLogReader(elQuery);
    
            List<EventRecord> eventList = new List<EventRecord>();
            for (EventRecord eventInstance = elReader.ReadEvent();
                null != eventInstance; eventInstance = elReader.ReadEvent())
            {
                //Access event properties here:
                //eventInstance.LogName;
                //eventInstance.ProviderName;
                eventList.Add(eventInstance);
            }
    

答案 1 :(得分:11)

您可以查询有问题的事件日志:

var sourceName = "MySource";
var el = new EventLog("Application");
var latestEntryTime = (from entry in el.Entries.Cast<EventLogEntry>()
                       where entry.Source == sourceName
                       && // put other where clauses here...
                       orderby entry.TimeWritten descending
                       select entry).First();

但是,请注意,此方法缓慢,因为Entries集合往往非常大。

相关问题