阅读从最新到最旧的事件日志

时间:2011-08-11 09:15:01

标签: c# .net windows event-log

我编写了一个简短的程序,使用在启动和关闭时发布的事件日志消息来确定远程PC的正常运行时间。目前的逻辑是:

  foreach (eventlogentry)
  {
       if (entryTime > OldestTime)
       {
            if (entry = Startup)
            {
                 addOnTime(entry.Time);
            }
            if (entry = Shutdown)
            {
                 addOffTime(entry.Time);
            }
       }
  }

“OldestTime”定义了在时间上向后扫描的距离....

我想知道是否还有很容易修改我的程序来阅读从最新到最旧的事件?

它正在读取远程事件日志,并且需要一段时间才能运行此函数,因为它从最后开始并向前读取。

我知道这是因为我在第一个“if”中添加了一个“else”块来打破foreach块,如果该条目不在我们正在寻找的时间范围内,并且程序在它读取的第一个事件处停止。

2 个答案:

答案 0 :(得分:3)

你问这个问题已经有一段时间了,但我遇到了同样的问题并找到了解决方案。

using System.Diagnostics;
using System.Linq;

EventLog events = new EventLog("Application", System.Environment.MachineName);
foreach (EventLogEntry entry in  events.Entries.Cast<EventLogEntry>().Reverse())
{
    //Do your tasks
}

这个awnser仍然不如向前枚举它那么快,但它比使用循环将项目复制到列表更优雅。

@ leinad13,对于您的应用程序,您需要将System.Environment.MachineName更改为一个字符串,其中包含您希望事件发生的计算机的名称并更改&#34; Application&#34;到你想看的日志。我认为&#34;系统&#34;在你的情况下。

答案 1 :(得分:0)

您最好的解决方案可能是将数据移动到列表中,然后颠倒它的顺序。如下所示:

EventLog eventLog = new EventLog();
eventLog.Log = myEventLog;
var eventList = new List<EventLogEntry>();

foreach(EventLogEntry entry in eventLog.Entries)
{
      eventList.Add(entry);
}

eventList.Reverse();

这应该以相反的顺序获取数据,即最新的数据,然后您可以像以前一样处理它,但是当您在最早的时间之前达到一个日期时这一次退出循环。

它不是一个理想的解决方案,因为您仍在处理整个日志,但可能值得尝试看看您是否获得了性能提升

相关问题