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

Reply via email to