2012-07-05 9 views
6

¿Cómo implementaría un sitio jsp que contiene un área de texto que muestra un archivo de registro en el servidor (tomcat) y se actualiza automáticamente?jsp para ver el archivo de registro (como "web tail -f")

Creo que la actualización es simple de sondear al servidor utilizando setTimeout y enviando una solicitud ajax. Pero el problema es cómo monitorear el archivo en el servidor (es un Log4J Logfile - ¿tal vez puedo usar un appender propio?) Para cambios y enviar solo las líneas modificadas cuando llega la solicitud de Ajax.

no tengo idea de cómo detectar las líneas cambiadas en el registro ...

Respuesta

10

y el sondeo del servidor cada pocos segundos es una buena idea, pero utilizando // será mucho más eficaz y no experimentarás ninguna latencia.

Con respecto a la del lado del servidor, que tienen pocas opciones:

  • abrir el archivo cada vez que el usuario solicita nuevos datos, ir al final y enviar últimas líneas. Debe indicar de alguna manera hasta qué línea de datos se envió la última vez para evitar enviar las mismas líneas varias veces o perder algunas de ellas. Utilizar un argumento de fecha y hora de la llamada AJAX decir: dame todas las líneas de registro después de ...

    Esta solución es muy ineficaz y generará una gran cantidad de tráfico de E/S

  • Mantener flujo abierto para iniciar la sesión archivo para cada cliente y cuando el cliente solicita nuevas líneas, lea todo lo que pueda (por supuesto, sin bloqueo).

    mucho mejor, pero no escala bien (demasiados archivos abiertos, aquí vengo)

  • Escribir un appender encargo y mantener los registros más recientes en la memoria. Cuando los clientes lo pidan, simplemente descargue el contenido de este búfer (se aplican las mismas restricciones en la marca de tiempo)

    ¡Muy robusto, pero tenga cuidado con el uso de la memoria!

  • Por último considerar el uso de ready-made tools like psi-probe proporcionar esta funcionalidad fuera de la caja:

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

Ver también:

+0

soluciones de código abierto en 2015? –

1

Hay una taglib para ello: http://www.servletsuite.com/servlets/tailtag.htm

Ponga el frasco en WEB-INF/lib, el TLD en WEB-INF/tags, y se puede utilizar:

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

muy buenas soluciones que yo no sabía es mención en el hilo, aquí es otro que he encontrado en Google- stail

Cuestiones relacionadas