Leer datos de un archivo de registro como una aplicación separada es escribir en él
Pregunta
Me gustaría monitorear un archivo de registro en el que está escribiendo una aplicación.Quiero procesar el archivo línea por línea a medida que se escribe, o poco después.No he encontrado forma de detectar que un archivo se ha extendido después de llegar a eof.
El código debe funcionar en Mac y PC, y puede estar en cualquier idioma, aunque estoy más familiarizado con C++ y Perl.
¿Alguien tiene alguna sugerencia sobre la mejor manera de hacerlo?
Solución
En Perl, el Archivo::Cola El módulo hace exactamente lo que necesita.
Otros consejos
Una respuesta bastante genérica:
La mayoría de los idiomas, en EOF, devuelven que no se leyeron datos.Puede volver a intentar leer después de un intervalo y, si el archivo ha crecido desde entonces, esta vez el sistema operativo devolverá datos.
la esencia de tail -f
es el siguiente bucle:
open IN, $file;
while(1) {
my $line = <IN>;
if($line) {
#process line...
} else {
sleep(1);
seek(IN,0,1);
}
}
close IN;
El buscar La llamada es borrar la bandera EOF.
Deberías poder usar leer el io estándar desde tail -f
Habría pensado generar las acciones a través de T y luego seguirlas (o usar el bucle arriba) el archivo creado por tee some use.
Para Java vea este excelente artículo
http://www.informit.com/guides/content.aspx?g=java&seqNum=226