NAME

HTTPD::WatchLog - watching Apache AccessLog in realtime

SYNOPSIS

use HTTPD::WatchLog;

# ready..
my $log = new HTTPD::WatchLog;

$log->file('/usr/local/apache/logs/combined_log');
$log->addr2host(1);    # convert ip address to hostname

# set options
$log->ignore('localhost', '192\.168\.0\.');
$log->ignore('/cgi-bin/');
$log->highlight('POST ');
$log->highlight(' 404 ', ' 500 ');

# regist triggers
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 );

# go!
$log->watch;

DESCRIPTION

HTTPD::WatchLog is designed for watching Apache webserver's AccessLog in realtime. This module provides unix command tail(1) like environment with more enhancement.

METHOD

new()

Construct a object. Some values (provided as accessors) can be set here.

my $log = HTTPD::WatchLog->new(
    file => '/usr/local/apache/logs/access_log',
    addr2host => 1,
  );

file()

File path of what you want to watch. The default path is '/usr/local/apache/logs/access_log'.

$log->file('/var/httpd/logs/combined_log');

addr2host()

Turn on ip address to hostnam DNS lookup switch. boolean value.

$log->addr2host(1);    # on
$log->addr2host(0);    # off (default)

ignore()

Set regex as scalar or array. The module ignores lines that cotains the regex(es).

$log->ignore( 'localhost', '192\.168\.0\.' );
$log->ignore( 'Mon' );    # i hate monday of course .. ;-)

highlight()

Set regex as scalar or array. highlight()ed term is highlightly showed if you use proper terminal.

$log->highlight( 'HEAD ', 'POST ' );
$log->highlight( 'root\.exe' );

trigger()

Regist trigger subroutines as scalar or array.

my $sub = sub {  ...  };
sub foo {  ...  };

$log->trigger( $sub );
$log->trigger( $sub, \&foo );

watch()

Now you can got it ! That's all.

$log->watch;

DEPENDENCY

File::Tail, Class::Accessor

AUTHOR

Okamoto RYO <ryo@aquahill.net>

SEE ALSO

perl(1), tail(1), File::Tail, Socket, Class::Accessor

TODO

Thinking now.. This module is experimental one, please tell me your ideas. :-)