From: Mike S. <log...@pe...> - 2003-07-15 07:40:22
|
On Mon, 14 Jul 2003, Kyle R. Burton wrote: > Looking a bit further, we noticed > that the is_* methods (is_debug) were not implemented using that > approach and that raised the question of wether or not they could be. > Could those methods be created to just return undef or 1? Actually, please ignore my previous email, I looked at the code again found an easy patch that'll do exactly what you suggested. I've run a couple of benchmarks -- it improves performance of all is_xxx() methods by a whopping 300%. Here's the fix -- Kevin and Erik, can you guys please double-check if I've overlooked anything? Index: Logger.pm =================================================================== RCS file: /cvsroot/log4perl/Log-Log4perl/lib/Log/Log4perl/Logger.pm,v retrieving revision 1.51 diff -a -u -r1.51 Logger.pm --- Logger.pm 6 Jul 2003 21:39:29 -0000 1.51 +++ Logger.pm 15 Jul 2003 07:32:25 -0000 @@ -157,10 +157,12 @@ )) { print " ($priority{$levelname} <= $level)\n" if DEBUG; - $self->{$levelname} = $coderef; + $self->{$levelname} = $coderef; + $self->{"is_$levelname"} = sub { 1 }; }else{ print " ($priority{$levelname} > $level)\n" if DEBUG; - $self->{$levelname} = $noop; + $self->{$levelname} = $noop; + $self->{"is_$levelname"} = sub { 0 }; } print(" Setting [$self] $self->{category}.$levelname to ", @@ -574,10 +576,11 @@ $_[0]->{$level}->(@_, $level); }; - *{__PACKAGE__ . "::is_$lclevel"} = sub { - return Log::Log4perl::Level::isGreaterOrEqual($_[0]->level(), - $$level - ); + *{__PACKAGE__ . "::is_$lclevel"} = sub { + $_[0]->{"is_" . $level}->(); +# return Log::Log4perl::Level::isGreaterOrEqual($_[0]->level(), +# $$level +# ); }; use strict qw(refs); -- Mike Mike Schilli log...@pe... http://perlmeister.com http://log4perl.sourceforge.net |