代码之家  ›  专栏  ›  技术社区  ›  kowsikbabu

如何仅读取添加到事件日志中的新事件?

  •  1
  • kowsikbabu  · 技术社区  · 7 年前

    我正在做一个项目来读取和显示windows事件日志。我使用以下代码从事件日志中读取事件并显示它们。

    public static void Main(string[] args)
    {
        EventLog[] ev;
    
        ev = EventLog.GetEventLogs();
    
        Console.WriteLine("Number of logs on computer: " + ev.Length);
    
        foreach (EventLog log in ev)
        {
            Console.WriteLine("Log: " + log.Log);
            foreach (EventLogEntry entry in log.Entries)
            {
                Console.WriteLine("Entry: " + entry.Message);
                Console.WriteLine("Source: " + entry.Source);
                Console.WriteLine("Category: " + entry.Category);
                Console.WriteLine("EventID: " + entry.Source);
            }
        }
    }
    

    这段代码运行良好。它显示已存储在日志文件中的所有事件。但我想在这之后实现的是,我必须阅读即将发生的事件和 update them every 10 seconds .

    如果我继续并再次调用相同的函数,我将获得所有事件,但我只需要新添加的事件。我如何做到这一点?

    TL DR:我只想听事件日志中新添加的事件,而不是整个事件日志

    2 回复  |  直到 7 年前
        1
  •  2
  •   TheGeneral    7 年前

    你可以这样做

    EventLog appLogs = new EventLog("Application");
    
    var entries = appLogs.Entries.Cast<EventLogEntry>()
                         .Where(x => x.TimeWritten >= DateTime.Now.AddMinutes(-60))
                         .ToList();
    

    然而,你什么时候过滤并不重要,它仍然需要同样的时间。

    据我所知,没有办法加快这一进程(据我所知)

    EventLog.EntryWritten Event

    在将条目写入本地计算机上的事件日志时发生。

    雷姆纳克斯

    您只能在写入条目时接收事件通知 本地计算机。您无法接收条目通知 写在远程计算机上。

    EventLog myNewLog = new EventLog("Application", ".", "testEventLogEvent");                 
    
    myNewLog.EntryWritten += new EntryWrittenEventHandler(MyOnEntryWritten);
    myNewLog.EnableRaisingEvents = true;
    

    这可能是一种比尝试轮询事件日志更轻松的方式

        2
  •  0
  •   kowsikbabu    7 年前

    我通过MSDN找到了解决方案。这是为将来可能来这里的人准备的, EntryWrittenEventHandler

    虽然前面的答案是正确的,但我只想添加,您可以使用 EventLogWatcher 用于管理日志以外的日志。