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

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

有人对最好的方法有建议吗?

有帮助吗?

解决方案

在 Perl 中, 文件::尾巴 模块正是您所需要的。

其他提示

一个足够通用的答案:

大多数语言在 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 标志。

您应该能够使用从 tail -f 读取标准 io

我本以为通过 tee 输出动作,然后尾部(或使用循环 多于)由 tee 创建的文件有一些用途。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top