syslogファイルをパースする
Parse:Syslogモジュールを使うと簡単です。
use strict;
use warnings;
use Parse::Syslog;
my $filename = '/var/log/messages'; # syslogファイル名
my $year = 2005; # syslog開始年
my $ps = Parse::Syslog->new($filename, year => $year);
while (my $log = $ps->next) {
printf "time: %s\n", $log->{timestamp};
printf "host: %s\n", $log->{host};
printf "prog: %s\n", $log->{program};
printf "pid : %s\n", $log->{pid} || '';
printf "text: %s\n", $log->{text};
print "\n";
}
newの中でyearでsyslog開始年を設定しています。通常syslogファイルの日時の部分には年の情報が出力されないために、ここで開始年を指定します。yearを省略した場合は当年を指定したことになります。