Dan Thomas wrote:
Hi,
I'm in the process of shifting some old mod_perl1 code over to
Apache2.2 and mod_perl2. Part of it is using Apache::LogFile to write
to a custom log. Well.. actually, it pipes the data to a little script
that collects up lines and forks off processes to deal with them when
it's got a handful (it gets hit a couple of million times per day, and
processing them one by one isn't particularly efficient). But that's
not entirely relevant, I suppose.
As far as I can tell, Apache::LogFile was never ported to mp2, and I
can't find anything that will let me define my own logfile. The
Apache::LogFile solution was very convenient, as it shuts down and
restarts the collector script with the daemon, but as my C skills are
practically non-existent, I doubt very much I'd be able to port it
myself, so I'm looking for an alternative.
Porting it to mod_perl 2 would certainly possible, but require some
surgery and XS/C code, unfortunately. On the bright side, the Apache
logging api in 2.0 is much nicer, so it would most likely end up being
less code.
Ideally, I want a single filehandle that will be opened and closed
when Apache starts up and shuts down, that I can write to from a
handler, but I'm not really sure where to start. Can anyone point me
in the right direction?
You could probably handle it nicely from a LogHandler
http://perl.apache.org/docs/2.0/user/handlers/http.html#PerlLogHandler
Load your module at startup, opening your file then. Collect the information
you are interested in logging any way you see fit ($r-notes, $r-pnotes are
good candidate), then use a LogHandler to do the final step. Buffer up to
a certain amount of data, check the filehandle is still good (if not, fix it),
then proceed to do whatever you used to.
Not quite as elegant as Apache::LogFile, but would work just fine. Porting
Apache::LogFile would be nicer still,...
Philippe M. Chiasson GPG: F9BFE0C2480E7680 1AE53631CB32A107 88C3A5A5
http://gozer.ectoplasm.org/ m/gozer\@(apache|cpan|ectoplasm)\.org/
signature.asc
Description: OpenPGP digital signature