Чтение данных из файла журнала в виде отдельного приложения и запись в него

Я хотел бы отслеживать файл журнала, который записывается приложением. Я хочу обрабатывать файл построчно, как вскоре после этого. Я не нашел способ обнаружить, что файл был расширен после достижения eof.

Код должен работать на Mac и ПК и может быть на любом языке, хотя я больше всего знаком с C++ и Perl.

У кого-нибудь есть предложения, как лучше всего это сделать?

6 ответов

Решение

В Perl модуль File::Tail делает именно то, что вам нужно.

Достаточно общий ответ:

Большинство языков на EOF возвращают, что никакие данные не были прочитаны. Вы можете повторить попытку чтения через определенный промежуток времени, и если с тех пор размер файла увеличился, операционная система вернет данные.

Суть tail -f это следующий цикл:

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

Запрос на поиск должен сбросить флаг EOF.

Вы должны быть в состоянии использовать чтение стандартного ввода-вывода из хвоста -f

Я бы подумал, выводя действия через tee, а затем хвост (или используя цикл выше) файл, созданный для некоторого использования.

Для Java смотрите эту отличную статью

http://www.informit.com/guides/content.aspx?g=java&seqNum=226

Другие вопросы по тегам