人気ブログランキングへ

2005年09月01日

Apache のログを Perl で解析する

Apache のログを解析する Perl モジュールを作ってみた。

http://www.sgk.gr.jp/office/zatugi/download/
の、WebTools::ApacheLog

このモジュールは、Apache の LogFormat ディレクティブに指定するのと同じ形式でログのフォーマットを設定できる。
たとえば、
  use WebTools::ApacheLog;
my $alog = new WebTools::ApacheLog(
logfile = '/usr/local/apache2/logs/access_log',
format = $WebTools::ApacheLog::format_combined
);
my @data = ();
while (my $line = $alog->readNextLine()) {
my @tmp = $alog->parseLine($line) or next;
push @data, \@tmp;
}

とすると、Apache の combined 形式の各項目 (%h, %l, %u, %t, %r, %>s, %b, %{Referer}i, %{User-Agent}i) に対応するデータを格納した配列へのリファレンスが、配列 @data に格納される (ややこしい...)。ログ形式はほかに、以下のようなものを定義している:
$WebTools::ApacheLog::format_common
common 形式
%h %l %u %t \"%r\" %>s %b
$WebTools::ApacheLog::format_common_vhost
バーチャルホスト付 common 形式
%v %h %l %u %t \"%r\" %>s %b
$WebTools::ApacheLog::format_combined
combined 形式
%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"
$WebTools::ApacheLog::format_referer
アクセス元情報
%{Referer}i -> %U
$WebTools::ApacheLog::format_agent
ブラウザ情報
%{User-agent}i
任意の形式を指定することも可能で、たとえば上の例の format = $WebTools::ApacheLog::format_combined のところを、
    format = '%h %t %r';
のように指定できる。仕組みは、format オプションに指定したログ形式を機械的にマッチング文字列に変換し、マッチングをかけている。
posted by K/I at 15:43 | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。