=encoding euc-jp =pod =head1 名前 HTTPD::WatchLog - リアルタイムにApacheアクセスログを監視します =head1 概要 use HTTPD::WatchLog; # 準備.. my $log = new HTTPD::WatchLog; $log->file('/usr/local/apache/logs/combined_log'); $log->addr2host(1); # IPアドレスをホスト名に変換 # オプションの設定 $log->ignore('localhost', '192\.168\.0\.'); $log->ignore('/cgi-bin/'); $log->highlight('POST '); $log->highlight(' 404 ', ' 500 '); # トリガの登録 my $sub = sub { my $line = shift; print STDERR "*** worm detected! \n" if $line =~ m|/root\.exe|; }; sub foo { exit(0) if shift =~ /Macintosh/; } $log->trigger( $sub, \&foo ); # そら行け! $log->watch; =head1 説明 HTTPD::WatchLogはリアルタイムにApachep Webサーバーのアクセスログを監視するよう 設計されています。このモジュールはunixコマンドtail(1)を拡張したような環境を 提供します。 =pod =head1 メソッド B オブジェクトの生成。(アクセッサとして提供される)いくつかの値を、ここで設定することができます。 my $log = HTTPD::WatchLog->new( file => '/usr/local/apache/logs/access_log', addr2host => 1, ); B あなたが監視したいファイルのパス。デフォルトのパスは'/usr/local/apache/logs/access_log'です。 $log->file('/var/httpd/logs/combined_log'); B IPアドレスからホスト名へのDNS検索スイッチをonにします。ブール値です。 $log->addr2host(1); # on $log->addr2host(0); # off (デフォルト) =pod B スカラーもしくは配列で正規表現を設定してください。このモジュールは指定された正規表現を含む行を無視します。 $log->ignore( 'localhost', '192\.168\.0\.' ); $log->ignore( 'Mon' ); # もちろん月曜日なんて大嫌いさ .. ;-) =pod B スカラーもしくは配列で設定してください。適切な端末を使えば、highlight()された用語だけが明るく表示されます。 $log->highlight( 'HEAD ', 'POST ' ); $log->highlight( 'root\.exe' ); =pod B スカラーまたは配列でトリガー・サブルーチンを登録します。 my $sub = sub { ... }; sub foo { ... }; $log->trigger( $sub ); $log->trigger( $sub, \&foo ); =pod B これで出きるようになりました!これだけです。 $log->watch; =pod =head1 依存性 File::Tail, Class::Accessor =head1 作者 Okamoto RYO =head1 参考資料 perl(1), tail(1), File::Tail, Socket, Class::Accessor =head1 TODO 今、考え中...。このモジュールは実験的なものです。どうかアイデアをください。 :-)