当单独的应用程序写入日志文件时,从日志文件中读取数据
题
我想监视应用程序正在写入的日志文件。我想在写入文件时或写入后不久逐行处理文件。我还没有找到一种方法来检测文件在达到 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
不隶属于 StackOverflow