perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <Ben.Carl...@priority-health.com>
Subject Mod Perl + Apache Error logs, extend DBILogger
Date Fri, 09 Jan 2004 21:51:08 GMT
I don't know if this is possible or not, but I took parts of DBILogger and wanted to extend
what I could
do with it.  What I would like to do is for a given request to a cgi program (or mason) if
the script causes
an internal error (which should not happen in production, but does) I would like to capture
the parameters
that were called from the cgi form so that later on I can look to see what cgi program it
was that caused
the problems and what parameters the user used to cause the problem.
 
So far what I have works, except for getting information from $r->content(), what I have
done is placed the
directive "PerlLogHandler Apache::ErrorLogger" which calls the script below, which is placing
information
into the logfile.  The $r->args() call works, when I place parameters in the URL after
the '?' it does get this
information.  What I really need though is the content in the content() call.
 
The form does have 'application/x-www-form-urlencoded' in the form tag.  Is the content()
not coming through
because apache redirects to the error page ?  
 
 
package Apache::ErrorLogger;
 
use strict;
use Apache::Constants qw( :common );
use Apache::Log;
use Apache::Request;
use Date::Format; 
 
sub handler {
        
        my $r = shift->last;
        my $s = $r->server;
        my $c = $r->connection;
 
        my %data = (
                    'host'      => "xrayfish-ssl",
                    'server'    => $s->server_hostname,
                    'bytes'     => $r->bytes_sent,
                    'filename'  => $r->filename || '',
                    'remotehost'=> $c->remote_host || '',
                    'remoteip'  => $c->remote_ip || '',
                    'status'    => $r->status || '',
                    'urlpath'   => $r->uri || '',
                    'referer'   => $r->header_in("Referer") || '',
                    'useragent' => $r->header_in('User-Agent') || '',
                    'timeserved'=> time2str("%Y-%m-%d %X", time),
                    'contenttype' => $r->content_type || ''
        );
 
        my $content = $r->content();
        my $args = $r->args();
 
        $data{usertrack} = $r->notes('cookie') || '';
        
        my $error_msg =  %data->{'host'}." >^..^< ".%data->{'server'}." >^..^<
".
                         %data->{'bytes'}." >^..^< ".%data->{'filename'}." >^..^<
".
                         %data->{'remotehost'}." >^..^< ".%data->{'remoteip'}."
>^..^< ".
                         %data->{'status'}." >^..^< ".%data->{'urlpath'}." >^..^<
".
                         %data->{'referer'}." >^..^< ".%data->{'useragent'}."
>^..^< ".
                         %data->{'timeserved'}." >^..^< ".%data->{'contenttype'}."
>^..^< ".
                         %data->{'usertrack'}." >^..^< ".$content." args ".$args;
 

        if($r->status eq '500')
        {
          # Bomb is just a generic error logger that sends this information to the specified
logfile.
          &Bomb({display=>0, footer=>0, level=>3,  exit=>0, output=>'text',
                       error=>"Internal Server Error >^..^< $error_msg",
                       logfile=>'/var/apache_errorlogfile'
                      });
 
        }
 
        return OK;
}
 
 
 



** ** **  PRIVILEGED AND CONFIDENTIAL  ** ** **
This email transmission contains privileged and confidential information 
intended only for the use of the individual or entity named above.  Any 
unauthorized review, use, disclosure or distribution is prohibited and 
may be a violation of law.  If you are not the intended recipient or a 
person responsible for delivering this message to an intended recipient, 
please delete the email and immediately notify the sender via the email 
return address or mailto:postmaster@priority-health.com.  Thank you.


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message