Python、Tailer 和 Logrotate
我在Python中使用tailer来解析日志,但如果服务器上进行了日志轮换,它就会出问题。那么有什么其他的选择可以用呢?用popen中的tail -f,这样做不太符合Python的风格。
2 个回答
0
在日志轮换(logrotate)事件发生后,会出现以下情况:
- 日志文件的inode(索引节点)没有改变,但日志被重命名为新名字(例如 log.out.1)
- logrotate会创建一个同名的新文件(log.out)(我不太确定 :-)
tailer模块仍然会查看旧文件的inode。
你需要监控日志文件的inode值,以便正确跟踪日志。这就是'tail -F'的作用。
从它的源代码可以看出,tailer模块并没有设计成可以跟踪源文件的日志轮换:它是基于某种配方的。
http://code.activestate.com/recipes/157035/
所以对于你的任务来说,它并不太有用。
请查看源配方的评论。
--
附言:或者使用我写的那个,它是'tail -f'的一个封装 :)
http://code.activestate.com/recipes/577398-tail-f-with-inode-monitor/
0
添加日志轮换功能其实并不难。比如说,如果你有:
for line in tailer.follow(open('test.txt')):
print line
你可以在一个函数里加一个回调,这个回调会定期检查下一个文件名是否存在。如果存在,就跳出循环,开始在新文件上记录日志。