我想监视应用程序正在写入的日志文件。我希望逐行处理文件,或者在写入之后不久。我没有找到一种方法来检测文件在到达eof后已被扩展。
代码需要在Mac和PC上运行,并且可以使用任何语言,尽管我最熟悉C ++和Perl。
有人建议采用最佳方法吗?
答案 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