跟踪日志文件

4

我想在我的网站上添加一个日志查看器选项卡。该选项卡应该打印整个日志文件,然后仅打印新行(例如Linux中的tail -F命令)。客户端使用HTML和Javascript,服务器端使用Python。

这是我找到的tail Python函数(来自网页):

@cherrypy.expose
def tail(self):
    filename = '/opt/abc/logs/myLogFile.log' 
    f = subprocess.Popen(['tail','-F',filename],\
            stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    p = select.poll()
    p.register(f.stdout)

    while True:
        if p.poll(1):
            print f.stdout.readline()
    time.sleep(1)

这段代码确实可以打印整个日志文件。但是每次我向文件添加新行时,它总是从开头开始打印文件,而不是打印新行。

有什么建议可以解决吗?我在Python方面很新,所以我会感激任何形式的帮助。


你能否想到在 Logger 类的基础上添加一个包装器(该类可能会将日志内容写入文件)?每当你的 Logger 对象接收到要打印到日志文件中的一行内容时,这个包装器也会将该行内容传递给用户界面。 - Barun Sharma
1个回答

1
请注意 pytailer

https://github.com/six8/pytailer

具体来说,是关于follow命令:
# Follow the file as it grows
for line in tailer.follow(open('/opt/abc/logs/myLogFile.log')):
    print line

谢谢。实际上,我已经尝试使用pytailer。不知道为什么,但是当我使用follow函数时没有任何输出(没有错误,也没有输出)。 - Omri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接