--- sysplogd 2009/04/11 11:45:36 12 +++ sysplogd 2009/04/17 10:03:00 19 @@ -15,7 +15,12 @@ our $user = 'dpavlin'; our $log = '/tmp/sysplog.log'; -require 'conf.pl' if -e 'conf.pl'; +my $config = $0; +$config =~ s{/[^/]+$}{/conf.pl}; +if ( -e $config ) { + require $config; + warn "# using $config ", -s $config, $/; +} my $debug = 0; my $schema = 0; @@ -42,7 +47,6 @@ id serial, timestamp timestamp default now(), ip inet not null, - hostname text not null, message text, level int, facility int, @@ -83,12 +87,12 @@ my $sth_log_full = $dbh->prepare(qq{ insert into log - (ip,hostname,message,level,facility,program,pid) - values (?,?,?,?,?,?,?) + (ip,message,level,facility,program,pid) + values (?,?,?,?,?,?) }); my $sth_log_unparsed = $dbh->prepare(qq{ - insert into log (ip,hostname,messsage) values (?,?,?) + insert into log (ip,message) values (?,?) }); @@ -107,21 +111,28 @@ _log "INFO: listen on $port"; -my $rin = ''; my $buf; while(1) { $sock->recv($buf, $MAXLEN); my ($port, $ipaddr) = sockaddr_in($sock->peername); - my $hostname = gethostbyaddr($ipaddr, AF_INET); +# my $hostname = gethostbyaddr($ipaddr, AF_INET); my $ip = join('.', unpack('C4',$ipaddr)); - my @values = ( $ip, $hostname, $buf ); + my @values = ( $ip, $buf ); - if ( $buf =~ /<(\d+)>\s*(\S*)\s*:\s*(.*)/ ) { - $values[2] = $3; + if ( $buf =~ s/<(\d+)>// ) { my $level = $1 % 8; my $facility = ( $1-$level ) / 8; - my $program = $2; - my $pid = $1 if $program =~ s/\[(\d+)\]$//; + + $buf =~ s/^\w\w\w \d+ \d\d:\d\d:\d\d//; # strip timestamp which some syslog servers insert here + + my ( $program, $pid ); + + if ( $buf =~ s/^\s*([^:]+)\s*:\s*// ) { + $program = $1; + $pid = $1 if $program =~ s/\[(\d+)\]$//; + } + + $values[1] = $buf; push @values, ( $level, $facility, $program, $pid ); $sth_log_full->execute( @values ); } else {