From: Jonathan M. <jma...@al...> - 2003-10-02 22:06:01
|
Hello, It seems that a textual log level ('INFO' vs $INFO) is accepted by Log::Log4Perl::Level::is_valid(). So, if I call: $log->level('INFO'); The string 'INFO' passes is_valid(), and becomes that logger's level. But, level() doesn't do any conversion back the the numerical form, so what follows is lots of non-numeric comparison with <= errors. I know you're *supposed* to import the levels and call $log->level($INFO) instead, but it seems like a flaw for the string form to be accepted by is_valid, but not work as a logging level. Personally, I would prefer it if $log->level() just accepted the text string, and did the conversion to the numeric form for me. I do see in the CVS log that this was a recent change to is_valid, so maybe it's there for a reason and these changes are already planned. Perhaps this is too unlike Log4J, so that makes it a design decision on whether to accept the text string or not - completely your call. Either way, a quick patch is provided below. It passes 'make test', though no test specifically tests the string forms of the levels - I'll go through the trouble to do this if this patch is approved. I'd be interested to hear any suggestions/counter-arguments. ~Jonathan --- Logger.pm.orig Sun Jul 20 15:34:08 2003 +++ Logger.pm Thu Oct 2 17:11:06 2003 @@ -362,7 +362,11 @@ if(defined $level) { croak "invalid level '$level'" unless Log::Log4perl::Level::is_valid($level); - $self->{level} = $level; + if($level =~ /[A-Z]/) { + $self->{level} = ${Log::Log4perl::Level::PRIORITY{$level}}; + } else { + $self->{level} = $level; + } &reset_all_output_methods unless $dont_reset_all; #keep us from getting overworked |