我遇到问题,理解为什么File :: Tail FAILS从一个总是在更新的文件中读取1000行事务和自动翻转的行。
它在某种程度上正确读取,但后来慢下来,并且很长一段时间甚至无法读取日志中的行。我可以确认实际日志正在填充,因为file :: tail没有显示任何内容。
my $file = File::Tail->new(name=>"$name",
tail => 1000,
maxinterval=>1,
interval=>1,
adjustafter=>5,resetafter=>1,
ignore_nonexistant=>1,
maxbuf=>32768);
while (defined(my $line=$file->read)) {
#my $line=$file->read;
my $xml_string = "";
#### Read only one event per line and deal with the XML.
#### If the log entry is not a SLIM log, I will ignore it.
if ($line =~ /(\<slim\-log\>.*\<\/slim\-log\>)/) {
do_something
} else {
not_working for some reason
}
有人可以帮我理解这一点。知道这个日志文件的更新速度接近每秒10MB或每秒1000个事件的近似值。
我应该将文件句柄或File :: Tail结果以其他更有效的方式处理吗?
答案 0 :(得分:0)
似乎File :: Tail中存在限制。围绕http://www.perlmonks.org/?node_id=387706中讨论的其他更直接的选项(管道,分支,线程,在perl中寻找文件的末尾)提出了一些建议。
我最喜欢的选择是从管道中阻止读取:
open(TAIL, "tail -F $name|") or die "TAIL : $!";
while (<TAIL>) {
test_and_do_something
}