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
|