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

时间:2008-09-15 13:24:31

标签: c++ perl macos file-io logging

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

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

有人建议采用最佳方法吗?

6 个答案:

答案 0 :(得分:7)

在Perl中,File::Tail模块完全符合您的需要。

答案 1 :(得分:3)

足够通用的答案:

EOF上的大多数语言都返回没有读取数据的语言。您可以在一段时间后重新尝试读取,如果文件已经增长,这次操作系统将返回数据。

答案 2 :(得分:3)

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

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

seek来电是清除EOF标志。

答案 3 :(得分:2)

你应该能够使用tail -f

中的标准io

答案 4 :(得分:0)

我曾经想过通过tee输出动作,然后尾随(或使用循环above)由tee创建的文件。

答案 5 :(得分:0)

对于Java,请参阅这篇优秀的文章

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