Python2:如何可靠地解析在另一个进程中保持打开状态的日志文件?
我正试图编写一个Python脚本来解析另一个守护进程生成的日志文件。这是在Linux上完成的。我希望能够可靠地解析日志文件 换句话说,我们定期运行一个脚本,逐行读取日志文件,并对每一行执行一些操作。日志脚本需要查看日志文件中可能出现的每一行。它可以通过cron每分钟运行一次 这里有一个问题,我不知道该如何解决。由于另一个进程对该文件有一个写句柄,因此它可以在我从同一个日志文件读取的同时写入 此外,我们经常希望清除此日志文件,以便其大小不会失控。但是,生成日志文件的过程除了定期停止、截断或删除文件,然后重新启动之外,无法清除文件。(我觉得logrotate有一些方法可以做到这一点,但我不知道logrotate是否依赖于守护进程的感知,或者它是否真的在关闭和重新启动守护进程,等等。更不用说我不希望其他日志被旋转,只需要这一个特定的日志;我不希望这个脚本要求其他可能的用户设置logrotate。) 问题是:Python2:如何可靠地解析在另一个进程中保持打开状态的日志文件?,python,file,logging,Python,File,Logging,我正试图编写一个Python脚本来解析另一个守护进程生成的日志文件。这是在Linux上完成的。我希望能够可靠地解析日志文件 换句话说,我们定期运行一个脚本,逐行读取日志文件,并对每一行执行一些操作。日志脚本需要查看日志文件中可能出现的每一行。它可以通过cron每分钟运行一次 这里有一个问题,我不知道该如何解决。由于另一个进程对该文件有一个写句柄,因此它可以在我从同一个日志文件读取的同时写入 此外,我们经常希望清除此日志文件,以便其大小不会失控。但是,生成日志文件的过程除了定期停止、截断或删除文件
logfile.readlines();logfile.truncate
的操作,这样就不会丢失任何条目。但这似乎是除非记录器进程很好地意识到这一点,否则它最终会导致比它解决的问题更多的问题。)谢谢 我看不出您不能读取syslogd创建的日志文件的任何特殊原因。您是说您正在使用一些类似于syslog的进程,而该进程正在保持日志文件的打开状态?既然您是在征求意见,我建议您使用syslog 无论如何,它都在工作——使用它。写入日志的一些简单方法是使用logger命令:
logger “MYAP: hello”
在python脚本中,您可以像这样执行:
import os
os.system(‘logger “MYAP: hello”’)
还请记住,您实际上可以配置syslogd
还有关于空日志的问题–sysclog没有清除日志。还有其他工具可以使用,比如在debian上使用logrotate。在这种情况下,如果日志为空,则可以检查由logrotate创建的备份文件
由于您的问题似乎出现在日志记录工具中,所以我的建议是使用syslog进行日志记录。和其他旋转原木的工具。然后您可以轻松地解析日志。如果通过任何方式(我不知道是否可以使用syslog)丢失一些数据,请记住,您将在下一次迭代中获得这些数据;)
另一个想法是复制日志文件并使用copy…几年后,我再次讨论这个问题,但它又出现了:-)问题是记录日志的过程不是我写的。应用程序只需打开一个日志文件,并在运行时写入。我不能改变那种行为。定期终止并重新启动该过程也是不可接受的。如果我可以用Python打开文件,读取内容,然后截断文件并将其文件指针移到0,那么做日志记录的应用程序就可以启动了