package Lemonldap::NG::Common::Logger::Dispatch; use strict; our $VERSION = '2.1.0'; sub new { no warnings 'redefine'; my $self = bless {}, shift; my ( $conf, %args ) = @_; my %bck; my $last; my $show = 1; my $root = $args{user} ? 'userLogDispatch' : 'logDispatch'; unless ( $conf->{ $root . 'Error' } ) { die "At least, ${root}Error must be defined in conf"; } foreach my $l (qw(error warn notice info debug)) { if ($show) { $last = $conf->{ $root . ucfirst($l) } || $last; unless ( $bck{$last} ) { eval "require $last"; die $@ if ($@); $bck{$last} = $last->new(@_); } my $obj = $bck{$last}; eval "sub $l { shift; return \$obj->$l(\@_); }"; } else { eval qq'sub $l {1}'; } $show = 0 if ( $conf->{logLevel} eq $l ); } die "unknown level $conf->{logLevel}" if ($show); return $self; } 1;