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

时间:2012-07-05 13:31:21

标签: java ajax jsp log4j

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

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

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

5 个答案:

答案 0 :(得分:11)

并且每隔几秒轮询服务器是一个好主意,但使用 / / 会更有效,您将无法体验任何延迟。

关于服务器端,你几乎没有选择:

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

    此解决方案效率很低,会产生大量I / O流量

  • 将开放流保存到每个客户端的日志文件中,当客户端要求新行时,尽可能多地阅读(当然不会阻塞)。

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

  • 编写自定义 appender并将最新日志保存在内存中。当客户端询问时,只需转储此缓冲区的内容(对时间戳应用的限制相同)

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

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

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

另见:

答案 1 :(得分:2)

没有尾巴/ ajax但是有这个

jsp file browser

答案 2 :(得分:1)

有一个taglib:http://www.servletsuite.com/servlets/tailtag.htm

将jar放入WEB-INF / lib,WEB-INF / tags中的tld,你可以使用:

<%@ 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>

答案 3 :(得分:0)

在线程中提到了我不知道的非常好的解决方案, 这是我在google- stail

中找到的另一个

答案 4 :(得分:0)

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

相关问题