2008-09-15 21 views
7

Chciałbym monitorować plik dziennika zapisywany przez aplikację. Chcę przetworzyć wiersz pliku po wierszu jako lub krótko po napisaniu. Nie znalazłem sposobu na wykrycie, że plik został rozszerzony po osiągnięciu eof.Czytanie danych z pliku dziennika jako osobnej aplikacji zapisuje się do niego

Kod ten musi działać na komputerach Mac i PC i może być w dowolnym języku, chociaż najlepiej znam język C++ i język Perl.

Czy ktoś ma sugestię, jak najlepiej to zrobić?

Odpowiedz

6

W Perlu moduł File::Tail wykonuje dokładnie to, czego potrzebujesz.

3

Wystarczająco rodzajowe odpowiedź:

większości języków na EOF, powrót, że żadne dane nie zostały odczytane. Możesz ponownie spróbować odczytać po pewnym czasie, a jeśli plik urósł od tego czasu, system operacyjny zwróci dane.

2

Powinieneś być w stanie korzystać ze standardowego odczytu IO z ogonem -f

3

Esencją tail -f jest następujące pętli:

open IN, $file; 
while(1) { 
    my $line = <IN>; 
    if($line) { 
    #process line... 
    } else { 
    sleep(1); 
    seek(IN,0,1); 
    } 
} 
close IN; 

seek wezwanie jest usunięcie flagi EOF.

0

Wydawało mi się, że wypisywanie działań za pośrednictwem tee, a następnie tail'ing (lub przy użyciu pętli above) plik utworzony przez tee niektóre wykorzystanie.