【问题标题】:Effectively reading a large, active Python log file有效读取大型活动 Python 日志文件
【发布时间】:2011-04-06 18:13:14
【问题描述】:

当我的 Python 脚本使用 Python 内置日志库逐行将大量日志写入文本文件时,我希望在我的 Delphi 驱动的 Windows 程序中有效阅读所有新添加的日志(行)。

  1. 当 Python 脚本正在记录时 到该文件,我的 Windows 程序将 保持 readonly 文件句柄 该日志文件;

  2. 我将使用 Windows API 来获取 当日志文件被通知时 改变了;文件更改后,它将读取新附加的行。

我是 Python 新手,您认为这种方法有什么问题吗? Python 日志库是否会锁定整个日志?谢谢!

【问题讨论】:

    标签: python windows logging text-files


    【解决方案1】:

    当然,这取决于您使用的日志记录处理程序,但正如您从source code 中看到的那样,logging.FileHandler 当前不创建任何文件锁。默认情况下,它以“a”(追加)模式打开文件,所以只要您的 Windows 调用可以处理它,就可以了。

    【讨论】:

      【解决方案2】:

      正如 ʇsәɹoɈ 所评论的,标准的 FileHandler 记录器不会锁定文件,因此它应该可以工作。但是,如果由于某种原因您无法锁定文件 - 那么我建议让您的其他应用程序定期打开文件,记录它读取的位置,然后稍后再返回该点。我知道 Linux DenyHosts 程序在处理它必须长时间监视的日志文件时使用这种方法。在这些情况下,简单地持有锁是不可行的,因为目录可能会移动,文件会被轮转等等。虽然它确实使事情变得复杂,但你必须将文件名 + 读取位置存储在某个地方的持久状态中。

      【讨论】:

      • 由于在EXE程序中要实时显示新增的日志条目,我怕关闭再打开日志文件会造成性能瓶颈。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 2015-06-04
      相关资源
      最近更新 更多