【发布时间】:2010-12-21 06:16:27
【问题描述】:
我正在尝试找到一种有效的方式来查看网页上的服务器日志,我不介意构建一个应用程序,但我无法找到最佳方式。
有没有办法让流对 php 文件和浏览器保持打开状态?还是必须通过每 x 秒轮询一次文件来完成?
提前致谢,
沙迪
【问题讨论】:
标签: php javascript file stream logging
我正在尝试找到一种有效的方式来查看网页上的服务器日志,我不介意构建一个应用程序,但我无法找到最佳方式。
有没有办法让流对 php 文件和浏览器保持打开状态?还是必须通过每 x 秒轮询一次文件来完成?
提前致谢,
沙迪
【问题讨论】:
标签: php javascript file stream logging
最好的解决方案绝对是某种能力的 AJAX。让服务器按照您描述的方式(保持打开的流)向您“推送”的唯一方法是要求 HTTP 连接保持打开状态,这最终会触发超时并消耗大量资源。我会调查Cometd library。这样做的缺点是我相信它依赖于 Java,尽管该站点确实提到了 perl、python 和“其他语言”。在最坏的情况下,您可以使用特定的码头实现仅用于特定端口上的日志监控。无论如何,该框架很可能是您的最佳选择。
任何基于 Web 的聊天机制本质上都使用推送架构,并且很适合寻找一些灵感。在这种情况下,不是用户创建向其他用户触发的消息,而是服务器创建事件(当生成日志消息时)。查看this article on Facebook chat 了解他们是如何做到的。如果你能在架构上找到一些东西,谷歌聊天可能值得研究。
对于实际的日志记录,我不确定您是否需要帮助,但目前正在孵化的log4php 可能是一个不错的起点,因为它为您提供了可以同时记录日志的配置到任意数量的“记录器”,如数据库、文件、套接字等。您可能会找到一个允许您将其绑定到您选择使用的任何推送框架中。
祝你好运!
【讨论】:
请记住,Web 模型本质上是无状态的(断开连接)。考虑到这一点,当客户端提交请求时,服务器会处理请求,然后相应地发送响应。您可以使用 cookie 和/或会话来跟踪客户端的操作,但为请求保留的资源会在响应提交回来后释放。 我认为实现您的目标的最佳方法是开发一个 Web 服务来检查日志的状态并获取差异(如果有)。您的应用程序可能包含一个带有 div 的网页,该 div 将显示来自 Web 服务的差异。 带有计时器的脚本将触发对 Web 服务的调用。 我会在几周内尝试做这样的事情,我会在moropo blog(西班牙语)上发布整个解决方案。您可以使用 cmets 请求后期翻译。
【讨论】:
最好的方法是使用 AJAX 每隔 x 秒拉一次文件内容,给人一种实时的错觉。
如果您确实想要实时,可以使用 XMPP 服务器,但据我所知,第一个解决方案已经足够了,不需要很多工作。
【讨论】:
试试wonlog。 https://www.npmjs.com/package/wonlog 您可以将多个日志文件流式传输到 Web 浏览器。
【讨论】: