Lire des données d'un fichier journal en tant qu'application distincte y écrit
Question
Je souhaite surveiller un fichier journal en cours d'écriture par une application. Je souhaite traiter le fichier ligne par ligne au fur et à mesure de son écriture ou peu après. Je n'ai pas trouvé le moyen de détecter qu'un fichier a été étendu après avoir atteint eof.
Le code doit fonctionner sur Mac et PC, et peut être dans n’importe quel langage, bien que je sois plus familier avec C ++ et Perl.
Quelqu'un a-t-il une suggestion quant à la meilleure façon de procéder?
La solution
En Perl, le module Fichier :: Queue fait exactement ce dont vous avez besoin.
Autres conseils
Une réponse assez générique:
La plupart des langues, sur EOF, indiquent qu'aucune donnée n'a été lue. Vous pouvez réessayer de lire après un intervalle et si le fichier a grossi depuis, le système d'exploitation renvoie cette fois des données.
L'essence de tail -f
est la boucle suivante:
open IN, $file;
while(1) {
my $line = <IN>;
if($line) {
#process line...
} else {
sleep(1);
seek(IN,0,1);
}
}
close IN;
L'appel chercher est pour effacer le drapeau EOF.
Vous devriez pouvoir utiliser lire le standard io from tail -f
J'aurais pensé que les actions seraient affichées via tee et ensuite (ou en utilisant la boucle ci-dessus ) le fichier créé par Tee utilisation.
Pour Java, voir cet excellent article
http://www.informit.com/guides/content. aspx? g = java & seqNum = 226