当我的Python脚本使用Python内置日志logging库逐行写入大量日志到文本文件时,在Delphi驱动的Windows程序中,我想要有效地读取所有新添加的日志(行)。
当Python脚本logging到文件时,我的Windows程序将保持对该日志文件的只读文件句柄;
我将使用Windows API在日志文件更改时获得通知; 一旦文件被更改,它将读取新添加的行。
我是Python的新手,你看到这种方法有任何可能的问题吗? Python日志logging库是否locking整个日志? 谢谢!
正如ɈsәɹoɈ所述,标准的FileHandler记录器不会锁定文件,因此它应该可以工作。 然而,如果由于某种原因,你不能让你锁定文件 – 那么我建议让你的其他应用程序定期打开文件,记录它读取的位置,然后再回到那一点。 我知道Linux DenyHosts程序在处理需要长时间监视的日志文件时使用了这种方法。 在这些情况下,简单地持有一个锁是不可行的,因为目录可能会移动,文件被旋出等等。尽管这样会使事情变得复杂,那么你必须将文件名+读取位置存储在持久状态的某处。
当然,这取决于您使用的日志处理程序,但正如您从源代码中所看到的那样,logging.FileHandler当前不会创建任何文件锁定。 默认情况下,它以“a”(追加)模式打开文件,所以只要你的Windows调用可以处理,你应该没问题。