【问题标题】:Read Event Log From Newest to Oldest从最新到最旧读取事件日志
【发布时间】:2011-10-24 19:21:55
【问题描述】:

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

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

“OldestTime”定义时间向后扫描多远......

我想知道是否有任何方法可以轻松修改我的程序以从最新到最旧读取事件?

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

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

【问题讨论】:

  • 您如何阅读事件日志?您可能能够更改读取日志的方式,以便它以不同的顺序处理它,但是当您到达代码中的这一点时,读取已经发生,因此您无法更改顺序。跨度>
  • 这些日志是文本文件吗?如果是这样,您可以不先将它们加载到列表中,然后从您想要的末尾读取它吗?
  • 您使用什么 API 来查询这些远程偶数日志条目?是否有一个 API 可用于仅请求比 OldestTime 更新的条目?这样顺序就不重要了。

标签: c# .net windows event-log


【解决方案1】:

您最好的解决方案可能是将数据移动到一个列表中,然后颠倒该列表的顺序。类似于以下内容:

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

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

eventList.Reverse();

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

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

【讨论】:

    【解决方案2】:

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

    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 更改为一个字符串,其中包含您希望从中获取事件的计算机的名称,并将“应用程序”更改为您想要查看的日志。我认为你的情况是“系统”。

    【讨论】:

    • EventLogEntryCollection 支持索引。最好使用反向整数迭代器循环它,即for (int i=collection.Count;i &gt; 0;i--) { collection[i].whatever}
    猜你喜欢
    • 2013-11-26
    • 2023-03-16
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2019-07-26
    • 1970-01-01
    • 2019-04-10
    相关资源
    最近更新 更多