如何實現一個包含文本區域的jsp站點,該文本區域在(tomcat)服務器上顯示日誌文件並自動刷新。jsp查看日誌文件(如「web tail -f」)
我認爲刷新很簡單,使用setTimeout輪詢服務器併發送ajax請求。但問題是如何監視服務器上的文件(這是一個Log4J日誌文件 - 也許我可以使用自己的appender?)進行更改,並在ajax請求到達時僅發送已更改的行?
我不知道如何將改線檢測日誌...
如何實現一個包含文本區域的jsp站點,該文本區域在(tomcat)服務器上顯示日誌文件並自動刷新。jsp查看日誌文件(如「web tail -f」)
我認爲刷新很簡單,使用setTimeout輪詢服務器併發送ajax請求。但問題是如何監視服務器上的文件(這是一個Log4J日誌文件 - 也許我可以使用自己的appender?)進行更改,並在ajax請求到達時僅發送已更改的行?
我不知道如何將改線檢測日誌...
ajax和輪詢服務器每隔幾秒鐘是一個好主意,但使用comet/server-push/websocket將更加有效你不會遇到任何延遲。
至於服務器端,你有幾種選擇:
打開文件中的每個用戶請求新數據時,去年底和去年送行。您需要以某種方式指出最後一次發送哪一行數據,以避免多次發送相同的行或丟失其中一些行。使用時間戳參數AJAX調用說:給我的所有日志行後...
該解決方案是非常無效的,會產生大量的I/O流量的
保持打開的流登錄文件爲每個客戶端,當客戶端要求換行時,儘可能多地閱讀(當然,不要阻止)。
好多了,但不會很好地擴展(打開的文件太多,我來了)
編寫自定義log4j附加器,並保持最近的日誌在內存中。當客戶端詢問時,只需轉儲此緩衝區的內容(適用於時間戳相同的限制)
非常強大,但要留意內存使用情況!
最後考慮使用現成的tools like psi-probe提供此功能外的開箱:
psi-probe http://psi-probe.googlecode.com/svn/wiki/Features/log-tail.png
有該標籤庫: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- stail
無尾/阿賈克斯找到,但有這個
雅加達公共IO庫提供的Tailer可能會有幫助。 Tailer可以充當生產者,GUI輪詢可以是消費者。
2015年還有哪些開源解決方案? – 2015-08-12 04:59:01