From: Tomas Doran Date: Tue, 21 Apr 2009 21:56:20 +0000 (+0000) Subject: Fix kds bug, find another bug causing all log levels to be turned on when passing... X-Git-Tag: 5.80002~4 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=abf65c2a15d206a147d712ba3d3a03227b25f48a Fix kds bug, find another bug causing all log levels to be turned on when passing C::Log an empty string --- diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 885822d..9d4d603 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -2398,14 +2398,19 @@ sub setup_log { $levels ||= ''; $levels =~ s/^\s+//; $levels =~ s/\s+$//; - my %levels = map { $_ => 1 } split /\s*,\s*/, $levels || ''; - + my %levels = map { $_ => 1 } split /\s*,\s*/, $levels; + + my $env_debug = Catalyst::Utils::env_value( $class, 'DEBUG' ); + if ( defined $env_debug ) { + $levels{debug} = 1 if $env_debug; # Ugly! + delete($levels{debug}) unless $env_debug; + } + unless ( $class->log ) { $class->log( Catalyst::Log->new(keys %levels) ); } - my $env_debug = Catalyst::Utils::env_value( $class, 'DEBUG' ); - if ( defined($env_debug) or $levels{debug} ) { + if ( $levels{debug} ) { Class::MOP::get_metaclass_by_name($class)->add_method('debug' => sub { 1 }); $class->log->debug('Debug messages enabled'); } diff --git a/t/unit_core_setup_log.t b/t/unit_core_setup_log.t index 7bc687d..ce4d58e 100644 --- a/t/unit_core_setup_log.t +++ b/t/unit_core_setup_log.t @@ -1,13 +1,14 @@ use strict; use warnings; -use Test::More tests => 24; +use Test::More tests => 30; use Test::Exception; use Catalyst (); sub mock_app { my $name = shift; + warn("Setting up mock application: $name\n"); my $meta = Moose->init_meta( for_class => $name ); $meta->superclasses('Catalyst'); return $meta->name; @@ -48,16 +49,28 @@ local %ENV; # Ensure blank or someone, somewhere will fail.. $app->setup_log(''); ok $app->debug, 'In debug mode'; test_log_object($app->log, - fatal => 1, # Note, log levels _are_ seemingly additive if debug is on. - error => 1, # CRACK - someone has been smoking it. - warn => 1, - info => 1, + fatal => 0, + error => 0, + warn => 0, + info => 0, debug => 1, ); } { local %ENV = ( CATALYST_DEBUG => 0 ); my $app = mock_app('TestLogAppDebugEnvUnset'); + $app->setup_log('warn'); + ok !$app->debug, 'Not In debug mode'; + test_log_object($app->log, + fatal => 0, + error => 0, + warn => 1, + info => 0, + debug => 0, + ); +} +{ + my $app = mock_app('TestLogAppEmptyString'); $app->setup_log(''); ok !$app->debug, 'Not In debug mode'; test_log_object($app->log,