log4perl und mod_perl

log4perl und mod_perl

am 01.02.2008 15:07:18 von Jens Puruckherr

Hi,

bei der Umsetzung einer vorhandenen Applikation auf apache mit mod_perl
stolpere ich ├╝ber Eigenheiten von log4Perl, die ich nicht so recht
deuten kann.

Der Code:

.....
use CGI qw/:standard/;
use Log::Log4perl qw(get_logger);
use Log::Log4perl::Level;

Log::Log4perl::Logger::create_custom_level("STATUS", "WARN");
Log::Log4perl->init_once(pfad_zum_configfile); # Init Logger

# eigene Module
use lib pfad-zu-den-klassen;
use Connector::Connect;


our $r = new CGI;
my $header = $r->header; # default html-header
my $data = '';
....
if(param('action') eq 'getKatalog'){
$header = $r->header('text/xml');
$data = Connector::Connect->getKatalog
param('shopid'),param('param') );
}
print $header, $data;
....


Weit unten in Connector::xxx
wird $logger->status(...) aufgerufen um den selbst definierten Loglevel
STATUS zu erhalten der via Filter separat behandelt wird.
Das klappt allerdings nur *manchmal* und im nicht nachzuvollziehenden
Rythmus. Wenn der Apache einen Fehler meldet, dann steht auch im error-log:
....
[Fri Feb 01 13:42:21 2008] [error] create_custom_level must be called
before init or first get_logger() call at
/usr/lib/perl5/vendor_perl/5.8.8/Log/Log4perl/Logger.pm line 694.

Bums, aus.

Die Geschichten zu mod_perl habe ich auf den log4perl-Seiten schon
studiert, mit init_once() sollte alles erledigt sein. Irgendwie klappt
es aber mit dem custom_level nicht immer - wie kann ich den Fehler
einkreisen?
Ich bin der Meinung, dass ich create_custom_level immer als erstes
aufrufe ... mod_perl wohl aber nicht.

Jens