Skip to main content
 首页 » 编程设计

c#之遍历事件日志条目集合,IndexOutOfBoundsException

2024年02月03日25mengfanrong

在服务应用程序中,我正在遍历 Windows 应用程序事件日志来解析事件,以便根据输入消息使用react。 如果事件日志已满(Windows 通常通过删除旧条目来确保有足够的空间 - 这可以在 eventvwr.exe 设置中进行配置),服务总是会遇到 在遍历 EventLog.Entries 集合时出现 IndexOutOfBoundsException。无论我如何迭代(for 循环、使用集合枚举器、将集合复制到数组中……),我似乎都无法摆脱这个“错误”。

目前,我通过解析事件日志文件并删除最后几个节点来定期删除最后几项,以确保日志未满以保持服务运行(不要打我,我不能'找不到更好的选择...)。

如何在不尝试访问已删除的条目的情况下遍历集合?

有没有更优雅的方法?我只是想访问在最后 x 秒内写入的日志(即使 LINQ 在日志已满时也无法选择那些 - 同样的异常),这有帮助吗?

感谢您的建议和提示

弗兰克

编辑:我忘了提及我的假设是循环正在访问在迭代期间被 Windows 删除的条目。基本上这就是我尝试克隆该集合的原因。是否有一种方法可以仅针对我的应用程序将集合锁定一小段时间?

请您参考如下方法:

我也遇到了这个问题,在 2008R2 域 Controller 上更是如此。问题是日志正在回绕,因此索引似乎在您开始迭代事件和到达这一点之间发生变化。

除了重试,似乎没有其他治疗方法。