From: Tomas Doran Date: Wed, 10 Dec 2008 00:32:51 +0000 (+0000) Subject: Patch to logging to add doc and make it possible to select levels and for them to... X-Git-Tag: 5.8000_05~97 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=0fa676a79aa572c22884b48560683f21f596fe45 Patch to logging to add doc and make it possible to select levels and for them to be additive, from the dev list 3 months ago which I dropped on the floor.. --- diff --git a/Changes b/Changes index 440c793..b80911c 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,8 @@ # This file documents the revision history for Perl extension Catalyst. + - Make log levels additive, and add documentation and tests + for the setup_log method, which previously had none. + Sewn together by t0m from two patches provided by David E. Wheeler - Switch an around 'new' in Catalyst::Controller to a BUILDARGS method as it's much neater and more obvious what is going on (t0m) - Add a clearer method on request and response _context diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 8480fca..ace6ba1 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -262,7 +262,9 @@ MYAPP_WEB_HOME. If both variables are set, the MYAPP_HOME one will be used. =head2 -Log -Specifies log level. + use Catalyst '-Log=warn,fatal,error'; + +Specifies a comma-delimited list of log levels. =head2 -Stats @@ -2204,19 +2206,34 @@ sub setup_home { =head2 $c->setup_log -Sets up log. +Sets up log by instantiating a L object and +passing it to C. Pass in a comma-delimited list of levels to set the +log to. + +This method also installs a C method that returns a true value into the +catalyst subclass if the "debug" level is passed in the comma-delimited list, +or if the C<$CATALYST_DEBUG> environment variable is set to a true value. + +Note that if the log has already been setup, by either a previous call to +C or by a call such as C<< __PACKAGE__->log( MyLogger->new ) >>, +that this method won't actually set up the log. =cut sub setup_log { - my ( $class, $debug ) = @_; + my ( $class, $levels ) = @_; + my %levels; unless ( $class->log ) { - $class->log( Catalyst::Log->new ); + $levels ||= ''; + $levels =~ s/^\s+//; + $levels =~ s/\s+$//; + %levels = map { $_ => 1 } split /\s*,\s*/, $levels || ''; + $class->log( Catalyst::Log->new(keys %levels) ); } my $env_debug = Catalyst::Utils::env_value( $class, 'DEBUG' ); - if ( defined($env_debug) ? $env_debug : $debug ) { + if ( defined($env_debug) or $levels{debug} ) { $class->Class::MOP::Object::meta()->add_method('debug' => sub { 1 }); $class->log->debug('Debug messages enabled'); } @@ -2492,6 +2509,8 @@ chansen: Christian Hansen chicks: Christopher Hicks +David E. Wheeler + dkubb: Dan Kubb Drew Taylor diff --git a/t/unit_core_setup.t b/t/unit_core_setup.t new file mode 100644 index 0000000..311320f --- /dev/null +++ b/t/unit_core_setup.t @@ -0,0 +1,48 @@ +use strict; +use warnings; +use Catalyst::Runtime; + +use Test::More tests => 18; + +{ + # Silence the log. + no warnings 'redefine'; + *Catalyst::Log::_send_to_log = sub {}; +} + +TESTDEBUG: { + package MyTestDebug; + use parent qw/Catalyst/; + __PACKAGE__->setup( + '-Debug', + ); +} + +ok my $c = MyTestDebug->new, 'Get debug app object'; +ok my $log = $c->log, 'Get log object'; +isa_ok $log, 'Catalyst::Log', 'It should be a Catalyst::Log object'; +ok !$log->is_warn, 'Warnings should be disabled'; +ok !$log->is_error, 'Errors should be disabled'; +ok !$log->is_fatal, 'Fatal errors should be disabled'; +ok !$log->is_info, 'Info should be disabled'; +ok $log->is_debug, 'Debugging should be enabled'; +can_ok 'MyTestDebug', 'debug'; +ok +MyTestDebug->debug, 'And it should return true'; + + +TESTAPP: { + package MyTestLog; + use parent qw/Catalyst/; + __PACKAGE__->setup( + '-Log=warn,error,fatal' + ); +} + +ok $c = MyTestLog->new, 'Get log app object'; +ok $log = $c->log, 'Get log object'; +isa_ok $log, 'Catalyst::Log', 'It should be a Catalyst::Log object'; +ok $log->is_warn, 'Warnings should be enabled'; +ok $log->is_error, 'Errors should be enabled'; +ok $log->is_fatal, 'Fatal errors should be enabled'; +ok !$log->is_info, 'Info should be disabled'; +ok !$log->is_debug, 'Debugging should be disabled';