【问题标题】:How to prevent loss of event retrieval while reading from event log?从事件日志中读取时如何防止丢失事件检索?
【发布时间】:2019-06-29 11:50:49
【问题描述】:

我正在使用EventLogWatcher 类(因为它被建议为从事件日志中读取的最快可用方法)来读取新写入的事件。假设我有一个名为 CustomEventLog1 的事件日志,大小为 2MB。我有一个应用程序将总共 20000 个事件写入此日志,并在日志达到最大大小时设置了 Overwrite events as needed

现在,当我开始编写事件时,观察者显然落后于阅读速度并且事件会丢失。

让我告诉它是如何发生的;当应用程序正在写入时说(1000th entry),观察者仍在读取500th entry,因此当观察者读取2000th entry时,写入应用程序已经将其替换为4000th entry

所以在1999th entry 之后,我得到4000th entry。当应用程序完成写入20000 events 时,观察者只得到了12020 entries,其余的都丢失了。

有没有办法解决这个问题?我知道增加日志文件大小就可以了,但是有没有办法在不增加日志大小和不降低写入速度的情况下实现这一点。

【问题讨论】:

  • 大概是通知过程有开销。我会说,一旦您收到“更改”通知,您应该在重新启动通知系统之前循环读取所有新事件。
  • 问题是我的应用程序每秒将 10000 个事件写入事件日志,而事件日志观察程序每秒只能读取 3000 个或更少的事件@jonathan
  • 此时您一次读取一个事件,在您读取下一个事件之前等待通知回调。我的建议是,在收到第一个通知后,循环阅读 all 新通知事件。或者更改您的应用程序,使其首先不向事件日志发送大量事件。

标签: c# winapi event-log system.diagnostics


【解决方案1】:

你想在不增加日志大小和降低写入速度的情况下进行覆盖,并且你还想读取已经覆盖的日志,你不能​​同时拥有。但是可以设置logsize >= 20000,读取完事件后删除,这样可以最大程度的节省日志大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    相关资源
    最近更新 更多