apache(じゃないな、ほんとはakamai)のclfログ形式のものを、処理する必要があり、parseツールを探していました。
perlで処理するんで普通にCPANの中から探して、Regexp::Log::Common'を使ってみました。
my $foo = Regexp::Log::Common->new( format => ':extended' );
my @fields = $foo->capture;
my $re = $foo->regexp;
と宣言しておいて、
@data{@fields} = /$re/;
で、@data落ちる。
あと、date部分についても細かに必要だったので、
my $http_day = qr/\d{1,2}/;
my $http_mon = qr/\w{3}/;
my $http_year = qr/\d{4}/;
my $http_hour = qr/\d{2}/;
my $http_min = qr/\d{2}/;
my $http_sec = qr/\d{2}/;
my $http_tz = qr/[-+]\d{4}/;
my @timefield = qw(http_day http_mon http_year http_hour http_min http_sec http_tz);
で、
@date{@timefield} = split /[\/:\s+]/,@data{'ts'};
で分解。あと、
my ($method,$uri,$proto) = split / /, @data{'req'};
とか。けど、秒精度のログ解析って、どこまで意味があるんでしょうかねぇ・・・仕事だから仕方ないけどぉ。。。
コメントする