2010-11-02 81 views
5

我有一个日志文件,并希望创建一个网页(可能是Python,但不是严格意义上的),它的工作原理与unix“tail -f filename”命令一样(在写入文件时显示新的日志行)。“tail -f filename”的Web实现?

因此,用户将持续在浏览器中看到正确的日志。

你将如何实现这一点?

回答

0

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

+0

如何使它自动uOdated? – 2017-06-03 03:36:05

8

Tailon是一个python web应用程序,除其他外,它提供tail -f类似的功能。此外,wtee(tailon的姊妹项目),可以使所有的标准输入在浏览器上查看 - 它的使用是相同的UNIX tee命令:

+0

试试http://rtail.org和https://github.com/mthenw/frontail – Synox 2017-01-25 20:40:40

0

我实现了这个使用jQuery(阿贾克斯)和PHP(JSON) 。

的流动基本上如下:

  • 用户在他们的浏览器调用一个HTML页面
  • HTML页面包含一个初始的jQuery阿贾克斯调用远程PHP脚本所需的执行服务器上函数,在这种情况下,检索文件的最后几行是'tailed'
  • 如果没有新行可用,php脚本只是循环(wile ajax调用者等待,即longpolling),并且可以配置如果需要超时(将适当的值返回给ajax调用函数o客户端)
  • 当PHP脚本检测到新行时,它们被封装在一个json响应中,并发送回浏览器的ajax调用函数,然后将其附加到页面的现有内容中。
  • 然后,javascript函数将递归地进行相同的ajax调用,并有效地坐在无限循环中。

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

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

使用jQuery和PHP看到我longpolling /实时尾执行: https://github.com/richardvk/web_file_tail

1

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

+0

这应该是被接受的答案。完美的工作。感谢您的支持。 – 2017-06-07 09:51:54