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

sat*_*tya 10 c# events

  1. 如何知道是否记录了特定事件(给定事件ID,时间和节点作为输入)?[在这种情况下,我知道只会记录一个事件]
  2. 如果记录了该事件,我如何获取事件描述,日志名称等详细信息.

例如,我想查询节点应用程序和服务日志> Microsoft> Windows> groupPolicy> Operational下的事件,事件ID为5315,时间是当前时间.

Tj *_*lie 19

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

  1. 您必须使用System.Diagnostics.Eventing.Reader命名空间中的类来读取新事件.
  2. 您的查询将采用Xpath格式,因此时间很棘手,请参阅msdn以获取EventLogQuery定义.
  3. 您的程序将遇到访问问题,准备好模拟日志记录计算机上的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<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);
        }
Run Code Online (Sandbox Code Playgroud)

  • 如何获取给定日期内的事件?查询 = "*[System[" + "(Provider/@Name=\"Microsoft Office 15 Alerts\") 和 " + //"(EventID=300) 和 " + "(TimeCreated/@SystemTime &gt;= \" " + t1 + "\") 和 " + "(TimeCreated/@SystemTime &lt;= \"" + t2 + "\")" + "]]"; 我收到查询异常 (2认同)

Mar*_*ann 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();
Run Code Online (Sandbox Code Playgroud)

但是,要注意这种方法很,因为Entries收集往往很大.