Tom Murphy wrote:
I have written a Apache::DBILogger style log mechanism. It is enabled via
the perl.conf in the Server context as:
PerlCleanupHandler NC::LogHandler
It works correctly, except for the fact that request handle by the
default-handler do not call this handler. The mod_perl cookbook makes note
that: "..a C module has to specifically want this processing to occur-it is
not called automatically."
well, what we said is true, but you're reading it the wrong way :)
basically, all of the Perl*Handler directives - from
PerlPostReadRequestHandler to PerlCleanupHandler - can be thought of as
parts of the request cycle. however, this is true for all but the
PerlCleanupHandler, which really isn't part of the request cycle - mod_perl
just makes it look that way. what's really happening is that mod_perl is
hooking your Perl handler into the per-request cleanup that Apache offers
all C modules (mod_perl included). so it _should_ be called for every
request it is configured to run for (should being highly caveated - people
have reported that _sometimes_ this doesn't really happen).
understanding that is A Good Thing. however, it's not going to help you
very much here :)
How do I allow for this handler to be called on
all requests? Note I also tried this as a PerlLogHandler to no avail.
if the PerlLogHandler doesn't get called then you probably have a
configuration problem. both of these can exist on their own, outside of a
container. something like
PerlLogHandler NC::LogHandler
...
if that doesn't show your log handler running then you need to check your
error log for errors and make sure your handler compiles under perl -cw or
something - if the log handler errors out, you really can't see it unless
you look.
of course, all this assumes that you built with EVERYTHING=1 - check
Apache::Status to make sure.
another thing you can try if that doesn't work out is compiling a debugging
mod_perl (PERL_DEBUG=1 and PERL_TRACE=1 when building) and set PerlSetEnv
MOD_PERL_TRACE on and watch the verbose output.
HTH
--Geoff