Adam Prime wrote:
You should package that up and put it on CPAN.
Attached is a version that works on mod_perl 1.
--
Michael Peters
Plus Three, LP
package Apache::Trace;
use strict;
use Apache::Log();
use Apache::Constants ':common';
our @Phases = qw(
PerlPostReadRequestHandler
PerlTransHandler
PerlMapToStorageHandler
PerlHeaderParserHandler
PerlAccessHandler
PerlAuthenHandler
PerlAuthzHandler
PerlTypeHandler
PerlFixupHandler
PerlResponseHandler
PerlLogHandler
PerlCleanupHandler
);
sub handler($$) {
my ($pkg_name, $r) = @_;
_add_http_phase_tracers($r);
DECLINED;
}
sub _add_http_phase_tracers {
my $r = shift;
for (@Phases) {
my $phase_name = $_;
$r->push_handlers($_, sub($) {
my $r = shift;
my $s = $r->server;
$s->warn(sprintf('phase=%s, status=%s, uri=%s, filename=%s',
$phase_name,
$r->status,
$r->uri,
$r->filename,
));
return DECLINED;
});
}
}
1;
__END__
=pod:summary Trace mod_perl server events
=pod:synopsis
In your Apache configuration file:
PerlPostReadRequestHandler Apache2::Trace->http_phases
Will produce output (C<error_log>) for each http request, e.g.:
... [warn] phase=PerlPostReadRequestHandler, status=200, uri=/, filename=
... [warn] phase=PerlTransHandler, status=200, uri=/, filename=
... [warn] phase=PerlMapToStorageHandler, status=200, uri=/,
filename=/var/www/vhosts/example.com/htdocs/
... [warn] phase=PerlHeaderParserHandler, status=200, uri=/,
filename=/var/www/vhosts/example.com/htdocs/
... [warn] phase=PerlAccessHandler, status=200, uri=/,
filename=/var/www/vhosts/example.com/htdocs/
... [warn] phase=PerlTypeHandler, status=200, uri=/,
filename=/var/www/vhosts/example.com/htdocs/
... [warn] phase=PerlFixupHandler, status=200, uri=/,
filename=/var/www/vhosts/example.com/htdocs/
... [warn] phase=PerlLogHandler, status=304, uri=/index.html,
filename=/var/www/vhosts/example.com/htdocs/index.html
... [warn] phase=PerlCleanupHandler, status=304, uri=/index.html,
filename=/var/www/vhosts/example.com/htdocs/index.html
=cut