jsp 查看日志文件(如“web tail -f”)

Posted

技术标签:

【中文标题】jsp 查看日志文件(如“web tail -f”)【英文标题】:jsp to view log file (like "web tail -f") 【发布时间】:2012-07-05 22:04:42 【问题描述】:

您将如何实现一个包含文本区域的 jsp 站点,该文本区域在 (tomcat) 服务器上显示日志文件并自动刷新。

我认为刷新很容易使用 setTimeout 轮询服务器并发送 ajax 请求。但问题是如何监控服务器上的文件(它是一个 Log4J 日志文件 - 也许我可以使用自己的 appender?)以进行更改并在 ajax 请求到达时仅发送更改的行?

我不知道如何检测日志中更改的行...

【问题讨论】:

【参考方案1】:

Jakarta Common IO 库提供的 Tailer 可能会有所帮助。 Tailer 可以充当生产者,GUI 轮询可以充当消费者。

http://alvinalexander.com/java/jwarehouse/commons-io-2.0/src/test/java/org/apache/commons/io/input/TailerTest.java.shtml

【讨论】:

【参考方案2】:

没有tail/ajax,但是有这个

jsp file browser

【讨论】:

【参考方案3】:

线程中提到了我不知道的非常好的解决方案, 这是我在谷歌找到的另一个-stail

【讨论】:

【参考方案4】:

ajax 并每隔几秒轮询一次服务器是个好主意,但使用 comet/server-push/websocket 会更有效,而且您不会遇到任何延迟。

关于服务器端,您有几个选择:

每次用户请求新数据时打开文件,转到末尾并发送最后几行。您需要以某种方式指出上次发送的行数据,以避免多次发送相同的行或丢失其中一些行。使用 AJAX 调用的时间戳参数来表示:在...之后给我所有日志行

这个方案非常无效,会产生大量的I/O流量

为每个客户端保持打开的流到日志文件,当客户端要求换行时,尽可能多地阅读(当然不要阻塞)。

好多了,但不能很好地扩展(打开的文件太多,我来了)

编写一个自定义的log4j appender 并将最近的日志保存在内存中。当客户询问时,只需转储此缓冲区的内容(适用于时间戳的相同限制)

非常强大,但要注意内存使用情况!

最后考虑使用现成的tools like psi-probe提供开箱即用的功能:

psi-probe http://psi-probe.googlecode.com/svn/wiki/Features/log-tail.png

另见:

Java web application that can stream the content of an arbitrary file to the browser (live tail) tail -f in a webbrowser

【讨论】:

2015 年还有什么开源解决方案吗?【参考方案5】:

有一个标签库:http://www.servletsuite.com/servlets/tailtag.htm

将jar放在WEB-INF/lib中,tld放在WEB-INF/tags中,就可以使用了:

<%@ taglib uri="taglib.tld" prefix="t" %> 

<!-- read last 50 rows and print them --> 
<t:tail file="c:/webserver/log.txt" count="50" id="S"> 
  <br><%=S%> 
</t:tail>

【讨论】:

以上是关于jsp 查看日志文件(如“web tail -f”)的主要内容,如果未能解决你的问题,请参考以下文章

linux查看日志文件tail -f用法

linux查看日志文件tail -f用法 -九五小庞

linux下查看日志和监控日志 --tail 命令

Linux 查看Tomcat日志文件

liunx-tail 实时显示文件内容

linux 实时查看日志 最新最后100行 tail