2011-05-31 5 views
6

Buscando información sobre cómo resolver el siguiente problema. La aplicación My ColdFusion 9 tiene un registrador simple que escribe texto en un archivo. En mi máquina de desarrollo, el archivo es local, así que puedo usar 'tail -f' o TailView de CFB para verlo. Me gustaría que una herramienta lo mire cuando se implementa en el servidor de producción. El truco: la producción se produce en un proveedor de hospedaje de CF compartido que no permite el acceso a archivos RDS o una puerta de enlace de observadores de directorios. Me pregunto acerca de una página con una metaetiqueta de actualización o si quiero obtener más fantasía, algo AJAXy con el mismo efecto. ¿Pensamientos? ¿Alguna herramienta que ya existe para esto?Encontrar un archivo de texto en un servidor web a través de HTTP

me permite experimentar con esto, pero estoy esperando que hay algo ahí fuera "más completa": following a log file over http

+0

Eche un vistazo a http://www.coldfusionjedi.com/index.cfm/2009/4/12/Using-ColdFusion-to-get-the- Fin de archivo: solo necesita agregar una actualización cada minuto más o menos .. –

+0

Puede probar el Se de HTML5 rver-Enviado si desea una buena solución de transmisión. – Henry

Respuesta

0

El siguiente pseudo-código está inspirado en this Java solution y no ha sido probado en absoluto:

if (NOT structKeyExists(application, "log") { 
    application.log = fileOpen('log.txt', 'read') 
} 

while(NOT FileisEOF(application.log)) { 
    writeOutput(fileReadLine(application.log) & "<br/>"); 
} 

Ponlo en una página con una actualización de meta y creo que probablemente estés en el negocio.

+0

Gracias, orangepips. Existen problemas habituales con los archivos de registro, como que son grandes. No quiero enviar repetidamente los mismos 1MB de datos solo para obtener las últimas 10 líneas. Ahora estoy pensando en algo puramente del lado del cliente usando AJAX y la solicitud HEAD de HTTP para mirar el contenido-longitud. Si eso ha cambiado desde el valor anterior, realice un GET usando el campo HTTP Range para obtener solo los datos actualizados para agregar al DOM. Parece algo que ya debería existir, así que busco en Google ... – DaveBurns

+0

No está enviando los mismos datos repetidamente porque la referencia del archivo solo se crea una vez y persiste en el ámbito de la aplicación. Por lo tanto, cada actualización solo muestra líneas recién agregadas. – orangepips

+0

Ah, por supuesto. ¿Cómo crees que lo anterior manejará el roll-over de registro? – DaveBurns

-1

Sé que es bastante vieja escuela, pero ¿ha considerado iniciar sesión en una base de datos? Si marca la hora de las entradas de registro en la tabla, puede utilizar los encabezados de caché de HTTP para comunicar al servidor qué nuevos datos debe ver.

+1

Se me pasó por la mente. Iniciar sesión en las bases de datos es una de esas cosas que las personas aman u odian: de alguna manera se vuelve religioso. Soy uno de esos que siente que es demasiado pesado. Buen tema para discusión, gracias. – DaveBurns

1

Puede que el siguiente script PHP:

<?php 
header("Content-Type: text/plain"); 
set_time_limit(0); 
passthru("tail -F -n +0 log.txt"); 
?> 
+0

Intenté esto en Mac OS X en/var/log/syslog y no aparece nada en la ventana del navegador hasta que detenga el servidor php. ¿Alguna idea de cómo vaciar el producto periódicamente? –

0

creo la siguiente escritura del golpe para mi caso de uso (tail.sh)

Es con el uso de 'lince' lista de archivos llegar desde el que obtener tamaño de archivo eso es necesario, y en el bucle infinito tratando de obtener parte del archivo

Cuestiones relacionadas