I once used this:
Is PerlCleanupHandler the same as LogHandler?
As far as I remember putting the code in the cleanup phase would mean
logging after finishing the request cycle with no delay for the client.
Is that true?
<Location /bankers >
SetHandler perl-script
PerlHandler Bankers::BedrijfswagensLijst
PerlCleanupHandler Apache::LogDBI
</Location>
package Apache::LogDBI;
use Apache::Constants qw(:common);
use strict;
use DBI ();
use Apache::Util qw(ht_time);
use constant DSN => 'dbi:mysql:koeweide';
use constant DB_TABLE => 'access_log';
use constant DB_AUTH => ':';
sub handler {
my $orig =shift;
my $r = $orig->last;
my $date = ht_time($orig->request_time, '%Y-%m-%d %H;%M:%S'
,0);
my $host = $r->get_remote_host;
my $method = $r->method;
my $url = $orig->uri;
my $user = $r->connection->user;
my $referer = $r->header_in('Referer');
my $browser = $r->header_in('User-agent');
my $status = $orig->status;
my $bytes = $r->bytes_sent;
my $dbh = DBI->connect(DSN,split ':', DB_AUTH);
my $sth = $dbh->prepare("insert into ${\DB_TABLE} values
(?,?,?,?,?,?,?,?,?)");
$sth->execute($date,$host,$method,$url,$user,$browser,$referer,$status,$bytes);
$sth->finish;
return OK;
}
1;
__END__
On Wed, 4 Apr 2001, darren chamberlain wrote:
> Andrew Lau ([EMAIL PROTECTED]) said something to this effect on
> 04/04/2001:
> > I am currently developing a Perl based apache module and was
> > wondering if such a functionality was available. From within
> > the module would it be possible to modify the request object so
> > that the url that gets logged to the access.log is different
> > from what the client actually requested?
> >
> > For example, if a client requested /file which was redirected
> > to this module could it modify either the request object or
> > some apache internal so that it gets written in the access log
> > as /file?session=1234567890abcdef .
> >
> > I apologize if this is readily available from some FAQ as i
> > have been unable to find this information. Thanks for your
> > time.
>
> This is untested, but I believe that mod_log_config logs, as part
> of the %r CustomLog directive, r->the_request, which is the first
> line of the request (i.e., "GET /file HTTP/1.0"). It might be
> possible to do something like:
>
> my @request = split / /, $r->the_request;
> $request[1] = sprintf "%s?session=%s", $request[1], $r->param('session');
> $r->the_request(join ' ', @request);
>
> assuming that $r->the_request is not read-only.
>
> Another option is to use CustomLog to log something other than
> %r, like %{session}e to log an environment variable, or %q to log
> the query string:
>
> CustomLog "%h %l %u %t \"%m %U%q %H\" %>s %b"
>
> %m is the method, %U is the requested url, %q is the query
> %string (or '' if no query string), %H is the request protocol.
>
> (darren)
>
> --
> Everybody wants to go to heaven, but nobody wants to die.
>