从日志文件中读取数据作为单独的应用程序正在写入中

时间:2020-03-05 18:53:27  来源:igfitidea点击:

我想监视应用程序正在写入的日志文件。我想在写入文件时或者之后不久逐行处理文件。我没有找到一种方法来检测文件到达eof后是否已扩展。

该代码需要能够在Mac和PC上运行,并且可以使用任何语言,尽管我最熟悉C ++和Perl。

有人对最佳方法提出建议吗?

解决方案

回答

在Perl中,File :: Tail模块完全可以满足需求。

回答

一个足够通用的答案:

在EOF上,大多数语言都返回未读取任何数据。我们可以在一定时间间隔后重试读取,如果文件从那以后开始增长,则操作系统将返回数据。

回答

我们应该可以使用tail -f读取标准io

回答

tail -f的本质是以下循环:

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

搜寻呼叫将清除EOF标志。

回答

我曾想过通过tee输出动作,然后通过tee(或者使用上面的循环)对tee创建的文件进行一些使用。