2012-07-05 3 views
6

Jak zaimplementować witrynę jsp zawierającą obszar tekstowy, który pokazuje plik dziennika na serwerze (tomcat) i odświeża się automatycznie.jsp, aby wyświetlić plik dziennika (np. "Web tail -f")

Myślę, że odświeżenie jest łatwe do sondowania do serwera przy użyciu setTimeout i wysyłanie żądania ajax. Ale problem polega na tym, jak monitorować plik na serwerze (jest to Log4J Logfile - może mogę użyć własnego aplikatora?) Do zmiany i wysyłania tylko zmienionych linii, gdy nadchodzi żądanie ajaxowe?

nie mam pojęcia, jak wykryć linie zmian w dzienniku ...

Odpowiedz

10

i przeszukiwania serwera co kilka sekund jest to dobry pomysł, ale przy użyciu // będzie znacznie bardziej skuteczna i nie doświadczysz żadnego opóźnienia.

W odniesieniu do po stronie serwera, masz kilka możliwości:

  • otworzyć plik za każdym razem, gdy użytkownik zażąda nowych danych, przejdź do końca i wysłać ostatnie wiersze. Musisz jakoś wskazać, do których danych linii został wysłany ostatni raz, aby uniknąć wielokrotnego wysyłania tych samych linii lub ich braku. Użyć argumentu timestamp do wywołania AJAX powiedzieć: dać mi wszystkie wiersze dziennika po ...

    To rozwiązanie jest bardzo nieefektywne i generuje dużo ruchu I/O

  • przechowywać otwartego strumienia zalogować plik dla każdego klienta i gdy klient prosi o nowe linie, czytaj tyle, ile możesz (oczywiście bez blokowania).

    Znacznie lepiej, ale nie będzie dobrze skalować (zbyt wiele otwartych plików, nadchodzę)

  • Napisz zwyczaj appender i zachować najnowsze logi w pamięci. Gdy klienci pytają, po prostu zrzuć zawartość tego bufora (obowiązują te same ograniczenia co znacznik czasu).

    Bardzo solidny, ale uważaj na wykorzystanie pamięci!

  • Wreszcie rozważyć użycie gotowych tools like psi-probe zapewniając tę ​​funkcjonalność out-of-the-box:

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

Zobacz także:

+0

Jakieś rozwiązania open source jeszcze w 2015 roku? –

1

Jest taglib za to: http://www.servletsuite.com/servlets/tailtag.htm

Put słoik w katalogu WEB-INF/lib, TLD w WEB-INF/tagów, można użyć:

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

Bardzo dobre rozwiązania że nie wiedział, to wzmianka w wątku, tutaj jest jeszcze jeden, który znalazłem w google- stail