高效读取大型活跃的Python日志文件

1 投票
2 回答
576 浏览
提问于 2025-04-16 15:13

当我的Python脚本使用内置的日志库一行一行地往文本文件里写大量日志时,我希望在我的Delphi程序中有效地读取所有新添加的日志(行)。

  1. 当Python脚本在往文件里写日志时,我的Windows程序会保持一个只读的文件句柄来访问那个日志文件;

  2. 我会使用Windows的API来获取文件变化的通知;一旦文件有了变化,我就会读取新添加的行。

我对Python还不太熟悉,你觉得这种方法有什么可能的问题吗?Python的日志库会锁住整个日志文件吗?谢谢!

2 个回答

1

这要看你使用的日志处理器了。不过从源代码来看,logging.FileHandler 现在并不会创建任何文件锁。默认情况下,它是以 'a'(追加)模式打开文件的,只要你的 Windows 系统能够处理这种方式,你就没问题。

0

正如ʇsәɹoɈ提到的,标准的FileHandler日志记录器并不会锁定文件,所以它应该可以正常工作。不过,如果因为某些原因你不能一直保持对文件的锁定,那么我建议你让你的其他应用程序定期打开这个文件,记录下它读取到的位置,然后再回到那个位置。我知道Linux的DenyHosts程序在处理需要长时间监控的日志文件时就是用这种方法。在这种情况下,单纯保持一个锁是不可行的,因为目录可能会移动,文件可能会被替换等等。不过,这样做会让事情变得复杂,因为你需要在某个地方保存文件名和读取位置的持久状态。

撰写回答