2012-07-05 48 views
6

如何實現一個包含文本區域的jsp站點,該文本區域在(tomcat)服務器上顯示日誌文件並自動刷新。jsp查看日誌文件(如「web tail -f」)

我認爲刷新很簡單,使用setTimeout輪詢服務器併發送ajax請求。但問題是如何監視服務器上的文件(這是一個Log4J日誌文件 - 也許我可以使用自己的appender?)進行更改,並在ajax請求到達時僅發送已更改的行?

我不知道如何將改線檢測日誌...

回答

10

和輪詢服務器每隔幾秒鐘是一個好主意,但使用//將更加有效你不會遇到任何延遲。

至於服務器端,你有幾種選擇:

  • 打開文件中的每個用戶請求新數據時,去年底和去年送行。您需要以某種方式指出最後一次發送哪一行數據,以避免多次發送相同的行或丟失其中一些行。使用時間戳參數AJAX調用說:給我的所有日​​志行後...

    該解決方案是非常無效的,會產生大量的I/O流量的

  • 保持打開的流登錄文件爲每個客戶端,當客戶端要求換行時,儘可能多地閱讀(當然,不要阻止)。

    好多了,但不會很好地擴展(打開的文件太多,我來了)

  • 編寫自定義附加器,並保持最近的日誌在內存中。當客戶端詢問時,只需轉儲此緩衝區的內容(適用於時間戳相同的限制)

    非常強大,但要留意內存使用情況!

  • 最後考慮使用現成的tools like psi-probe提供此功能外的開箱:

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

參見:

+0

2015年還有哪些開源解決方案? – 2015-08-12 04:59:01

1

有該標籤庫: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> 
0

很好的解決方案我不知道是在提到線程, 這裏是另外一個,我在google- stail