你将如何实现包含文本区域,显示了(Tomcat)的服务器上的日志文件,并自动刷新一个jsp网站。
我觉得刷新是简单的使用setTimeout和Ajax请求轮询服务器。 但问题是,如何监控服务器上的文件(这是一个Log4J的日志文件 - 也许我可以使用自己的附加目的地?)更改和当AJAX请求到达时只发送更改的行?
我不知道如何检测,在修改行日志中...
你将如何实现包含文本区域,显示了(Tomcat)的服务器上的日志文件,并自动刷新一个jsp网站。
我觉得刷新是简单的使用setTimeout和Ajax请求轮询服务器。 但问题是,如何监控服务器上的文件(这是一个Log4J的日志文件 - 也许我可以使用自己的附加目的地?)更改和当AJAX请求到达时只发送更改的行?
我不知道如何检测,在修改行日志中...
AJAX和轮询服务器每隔几秒钟是一个好主意,但使用彗星 / 服务器推送 / WebSocket的将是更有效的,你不会遇到任何延迟。
至于服务器端,你有几种选择:
打开文件中的每个用户请求新数据时,去年底和去年送行。 你需要以某种方式表明了哪个行数据发送的最后时间,以避免多次发送相同的路线或丢失其中的一些。 使用时间戳参数AJAX调用说: 以后给我的所有日志行...
该解决方案是非常无效的,会产生大量的I / O流量
保持开放的流记录为每个客户端文件,当客户端请求的新线,多读,你可以(当然不阻塞)。
要好得多,但不会很好地扩展( 打开的文件太多 ,我来了)
编写自定义的log4j附加目的地,并保持最近的日志在内存中。 当客户问,只是这个转储缓冲区的内容(时间戳相同的限制)
非常强大的,但要注意内存的使用!
最后考虑使用现成的像PSI-探测工具提供此功能外的开箱:
PSI探头http://psi-probe.googlecode.com/svn/wiki/Features/log-tail.png
无尾/阿贾克斯但这个
JSP文件浏览器
有该标签库: http://www.servletsuite.com/servlets/tailtag.htm
放入WEB-INF /罐子lib下,在WEB-INF /标签的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>
很好的解决方案,我不知道是在线程中提到,这里是另外一个我在google-发现斯太尔
雅加达通用IO库提供的零售商可能会有所帮助。 零售商可以作为生产者和GUI轮询可以消费。
http://alvinalexander.com/java/jwarehouse/commons-io-2.0/src/test/java/org/apache/commons/io/input/TailerTest.java.shtml