Web实现“tail -f filename”?

时间:2010-11-02 13:54:59

标签: tail

我有一个日志文件,想要创建一个网页(可能是Python但不严格),它的工作原理与unix“tail -f filename”命令相同(在写入文件时显示新的日志行)。

这样用户就可以在浏览器中持续查看日志。

你会如何实现这个?

4 个答案:

答案 0 :(得分:9)

Tailon是一个python webapp,除其他外,提供tail -f类似的功能。此外,wtee(tailon的姐妹项目)可以在浏览器中查看其所有stdin - 它的使用与unix tee命令相同:tail -f filename | wtee

答案 1 :(得分:1)

Scullog,具有将本地驱动器共享到浏览器的功能。通过浏览器通过Socket.IO流式传输日志文件。它可以在任何平台上运行,例如windows / linux / mac。它作为服务或独立模式运行。

答案 2 :(得分:0)

您阅读文件并将最后一行打印到页面。您也可以使用GET变量来定义要输出的行数?n = x其中x是行数。

答案 3 :(得分:0)

我使用jquery(.ajax)和php(json)实现了这个。

流程基本如下:

  • 用户在浏览器上调用html页面
  • html页面包含对服务器上执行所需功能的远程php脚本的初始jquery .ajax调用,在这种情况下,检索文件的最后一行是&#39; tailed&#39; < / LI>
  • 如果没有可用的新行,php脚本只是循环(假设ajax调用者等待,即longpolling),并且可以配置为在必要时超时(将适当的值返回给客户端上的ajax调用函数)
  • 当php脚本检测到新行时,它们被包装在json响应中并发送回浏览器上的ajax调用函数,然后将其附加到页面的现有内容。
  • javascript函数将以递归方式进行相同的ajax调用,实际上处于无限循环中。

在我的具体实施中,我做了以下内容:

  • 客户端上的ajax调用和服务器上的php脚本都有超时处理,例如,断开的连接很好。同时确保ajax调用不会永远等待。
  • ajax调用将行号作为引用传递回服务器,告诉它接收到的最后一个行号是什么,因此服务器知道要返回哪些行。最初值为零,服务器将立即返回文件的最后10行
  • 当调用php脚本时,它使用客户端的最后一个行号来快速检查文件;如果已经添加了新行,则立即返回它们,如果不是,它将处于循环(1秒),然后检查文件ctime(或mtime)以检测何时写入新行。这比每秒计算文件中的行(可能很大)更有效。

在这里使用jquery和php查看我的longpolling / realtime尾部实现: https://github.com/richardvk/web_file_tail