From: Mike S. <log...@pe...> - 2003-07-16 09:02:49
|
Hi all, just realized that our is_debug/info/etc. function didn't pay attention to config_and_watch so far -- whenever the configuration had been changed on the fly, loggers would adapt, but not our is_xxx() functions. Here's a fix (on top of the last fix posted) to correct this: Index: Logger.pm =================================================================== RCS file: /cvsroot/log4perl/Log-Log4perl/lib/Log/Log4perl/Logger.pm,v retrieving revision 1.52 diff -a -u -r1.52 Logger.pm --- Logger.pm 15 Jul 2003 16:03:06 -0000 1.52 +++ Logger.pm 16 Jul 2003 08:56:30 -0000 @@ -158,11 +158,13 @@ print " ($priority{$levelname} <= $level)\n" if DEBUG; $self->{$levelname} = $coderef; - $self->{"is_$levelname"} = sub { 1 }; + $self->{"is_$levelname"} = generate_is_xxx_coderef("1"); + #$self->{"is_$levelname"} = sub { 1 }; }else{ print " ($priority{$levelname} > $level)\n" if DEBUG; $self->{$levelname} = $noop; - $self->{"is_$levelname"} = sub { 0 }; + $self->{"is_$levelname"} = generate_is_xxx_coderef("0"); + #$self->{"is_$levelname"} = sub { 0 }; } print(" Setting [$self] $self->{category}.$levelname to ", @@ -280,6 +282,34 @@ return $coderef; } +################################################## +sub generate_is_xxx_coderef { +################################################## + my($return_token) = @_; + + my $coderef = ''; + my $watch_code = ''; + + if (defined $Log::Log4perl::Config::WATCHER) { + + $watch_code = <<'EOL'; + my($logger, $subname) = @_; + if(time() > $Log::Log4perl::Config::Watch::NEXT_CHECK_TIME) { + Log::Log4perl->init_and_watch(); + # Forward call to new configuration + return $logger->$subname(); + } +EOL + } + + my $code = <<EOL; + \$coderef = sub { $watch_code return $return_token; }; +EOL + + eval $code or die "$@"; + + return $coderef; +} ################################################## sub generate_watch_code { @@ -577,7 +607,7 @@ }; *{__PACKAGE__ . "::is_$lclevel"} = sub { - $_[0]->{"is_" . $level}->(); + $_[0]->{"is_" . $level}->($_[0], "is_" . $lclevel); # return Log::Log4perl::Level::isGreaterOrEqual($_[0]->level(), # $$level # ); -- Mike Mike Schilli log...@pe... http://perlmeister.com http://log4perl.sourceforge.net |