2
我正在使用rsyslog的基於屬性的過濾器發送特定的日誌到單獨的文件,這些日誌將使用perl進行解析。Perl無法尾循環日誌文件
這是我rsyslog現在進入
$template SPLIT,"/home/shivam/hello-%$YEAR%%$MONTH%%$DAY%%$HOUR%%$MINUTE%"
:msg, contains, "hello" -?SPLIT
所以rsyslog現在將創建單獨的文件中記錄每隔一分鐘就會到來。文件將被創建,像這樣hello-201505281139
。
我的Perl腳本分析這些文件是
use strict;
use warnings;
use POSIX qw(strftime);
my $date = strftime "%Y%m%d%H%M", localtime;
my $file = '/root/defer-'.$date;
open(my $fh,'<',$file) or die "unable to open file $!\n";
while(1) {
while(my $line = <$fh>){
print "$date\n";
print "$line";
}
sleep(2);
unless ($date == strftime "%Y%m%d%H%M", localtime) {
close($fh);
$date = strftime "%Y%m%d%H%M", localtime;
$file = '/root/defer-'. $date;
system("touch $file");
open(my $fh,'<',$file) or die "unable to open file $!\n";
}
}
,除非塊我檢查,如果分已經改變,那麼我以前關閉文件並打開新文件。 我從腳本創建新文件,而不是等待rsyslog創建文件的原因是日誌來的頻率並不是很高。所以我創建文件,並開始閱讀它,希望當任何新的日誌將到來,我將能夠閱讀。
但是發生的是我能夠創建新文件,但無法從該文件中讀取任何內容。
這就是我得到在我的代碼警告
readline() on closed filehandle $fh at test.pl line 14.
14號線是此行 while(my $line = <$fh>){
我不能看到什麼錯在我的代碼。請提出什麼是錯誤。
我在不同的$跳頻打開文件變量,我繼續從以前關閉的閱讀,從而造成所有麻煩。這是你的建議嗎? – shivams
@shivams是的,請檢查['由其他聲明隱藏的變量](http://perlmaven.com/scope-of-variables-in-perl) –
謝謝我真的被這個問題搞砸了,從來沒有意識到這是我的問題。再次感謝。 – shivams