【问题标题】:Web implementation of "tail -f filename"?“tail -f 文件名”的 Web 实现?
【发布时间】:2010-11-02 13:54:58
【问题描述】:

我有一个日志文件,想创建一个网页(可能是 Python,但不严格),其工作方式与 unix“tail -f 文件名”命令的工作方式非常相似(在写入文件时显示新的日志行)。

这样用户就可以在浏览器中不断看到登录。

你将如何实现它?

【问题讨论】:

    标签: tail


    【解决方案1】:

    Tailon 是一个 Python 网络应用程序,除其他外,它提供了类似 tail -f 的功能。此外,wtee(tailon 的姊妹项目)可以使其所有标准输入在浏览器中可见 - 它的使用与 unix tee 命令相同:tail -f filename | wtee

    【讨论】:

      【解决方案2】:

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

      流程大致如下:

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

      在我的具体实现中,我做了以下操作:

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

      在此处使用 jquery 和 php 查看我的 longpolling/realtime tail 实现: https://github.com/richardvk/web_file_tail

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 这应该是公认的答案。完美工作。谢谢你。
        【解决方案4】:

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

        【讨论】:

        • 如何让它自动u0dated?
        猜你喜欢
        • 1970-01-01
        • 2023-03-25
        • 2012-07-05
        • 1970-01-01
        • 1970-01-01
        • 2010-12-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多