Leggere i dati da un file di registro mentre un'applicazione separata ne sta scrivendo
Domanda
Vorrei monitorare un file di registro scritto da un'applicazione.Voglio elaborare il file riga per riga così come, o subito dopo, è stato scritto.Non ho trovato un modo per rilevare che un file è stato esteso dopo aver raggiunto eof.
Il codice deve funzionare su Mac e PC e può essere in qualsiasi linguaggio, anche se ho maggiore familiarità con C++ e Perl.
Qualcuno ha un suggerimento sul modo migliore per farlo?
Soluzione
In Perl, il File::Coda il modulo fa esattamente ciò di cui hai bisogno.
Altri suggerimenti
Una risposta abbastanza generica:
La maggior parte delle lingue, su EOF, restituisce che non sono stati letti dati.Puoi riprovare a leggere dopo un intervallo e, se da allora il file è cresciuto, questa volta il sistema operativo restituirà i dati.
L'essenza di tail -f
è il seguente ciclo:
open IN, $file;
while(1) {
my $line = <IN>;
if($line) {
#process line...
} else {
sleep(1);
seek(IN,0,1);
}
}
close IN;
IL cercare La chiamata è cancellare il flag EOF.
Dovresti essere in grado di leggere lo standard io da tail -f
Avrei pensato di emettere le azioni tramite tee e quindi di eseguire la coda (o utilizzare il loop Sopra) il file creato da tee some use.
Per Java vedere questo eccellente articolo
http://www.informit.com/guides/content.aspx?g=java&seqNum=226