2012-07-05 13 views
6

Come implementare un sito jsp contenente un'area di testo che mostra un file di registro sul server (tomcat) e si aggiorna automaticamente.jsp per visualizzare il file di registro (come "web tail -f")

Penso che l'aggiornamento sia semplice per eseguire il polling sul server utilizzando setTimeout e inviando una richiesta Ajax. Ma il problema è come monitorare il file sul server (è un Log Log di Log4J - forse posso usare un proprio appender?) Per le modifiche e inviare solo le righe modificate quando arriva la richiesta di ajax?

Non ho idea di come individuare le linee modificate nel registro ...

risposta

10

e polling del server ogni pochi secondi è una buona idea, ma usando // sarà molto più efficace e non sperimenterai alcuna latenza.

Per quanto riguarda i server-side, si hanno poche opzioni:

  • aprire il file ogni volta che l'utente richiede nuovi dati, andare alla fine e inviare ultime righe. È necessario in qualche modo indicare fino a quale riga dati sono stati inviati l'ultima volta per evitare di inviare più volte le stesse righe o mancarne alcune. Utilizzare un argomento timestamp per AJAX chiamata a dire: darmi tutte le righe di log dopo ...

    Questa soluzione è molto inefficace e genererà un sacco di traffico di I/O

  • Tenere flusso aperto il login file per ogni client e quando il client richiede nuove righe, leggi il più possibile (ovviamente senza bloccare).

    Molto meglio, ma non scala bene (troppi file aperti, qui vengo)

  • Scrivi un appender personalizzato e tenere i registri più recenti in memoria. Quando i client chiedono, basta scaricare il contenuto di questo buffer (si applicano le stesse restrizioni sul timestamp)

    Molto robusto, ma attenzione per l'utilizzo della memoria!

  • infine considerare l'utilizzo di ready-made tools like psi-probe che fornisce questa funzionalità out-of-the-box:

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

Vedi anche:

+0

eventuali soluzioni open source ancora nel 2015? –

1

C'è un taglib per questo: http://www.servletsuite.com/servlets/tailtag.htm

Mettere il vaso in WEB-INF/lib, il TLD in WEB-INF/tag, e si può usare:

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

Molto buone soluzioni che non conoscevo sono menzione nel thread, qui è un altro che ho trovato in Google- stail

Problemi correlati