C#:如何使用给定的事件ID查询事件日志详细信息?
- 如何知道是否记录了特定事件(给定事件ID,时间和节点作为输入)? [在这种情况下,我知道只会记录一个事件]
- 如果记录了该事件,我如何获取事件描述,日志名称等详细信息。
例如,我想查询节点应用程序和服务日志> Microsoft> Windows> groupPolicy> Operational下的事件,事件ID为5315,时间是当前时间。
如果您要从新样式的Windows EventLogs查询事件,则会有一些新的扭曲。
- 您必须使用System.Diagnostics.Eventing.Reader命名空间中的类来读取新事件。
- 您的查询将采用Xpath格式,因此时间很棘手,请参阅msdn以获取EventLogQuery定义 。
- 您的程序将遇到访问问题,准备好模拟日志记录计算机上的EventReader AD组中包含的用户。
此示例显示了一些新的访问方法,欢呼声。
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 eventList = new List (); for (EventRecord eventInstance = elReader.ReadEvent(); null != eventInstance; eventInstance = elReader.ReadEvent()) { //Access event properties here: //eventInstance.LogName; //eventInstance.ProviderName; eventList.Add(eventInstance); }
您可以查询有问题的事件日志:
var sourceName = "MySource"; var el = new EventLog("Application"); var latestEntryTime = (from entry in el.Entries.Cast() where entry.Source == sourceName && // put other where clauses here... orderby entry.TimeWritten descending select entry).First();
但是,要注意这种方法很慢 ,因为Entries
集合往往很大。