[Catalyst-commits] r8809 - in Catalyst-Runtime/5.80/trunk: . lib t

t0m at dev.catalyst.perl.org t0m at dev.catalyst.perl.org
Wed Dec 10 00:32:51 GMT 2008


Author: t0m
Date: 2008-12-10 00:32:51 +0000 (Wed, 10 Dec 2008)
New Revision: 8809

Added:
   Catalyst-Runtime/5.80/trunk/t/unit_core_setup.t
Modified:
   Catalyst-Runtime/5.80/trunk/Changes
   Catalyst-Runtime/5.80/trunk/lib/Catalyst.pm
Log:
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..

Modified: Catalyst-Runtime/5.80/trunk/Changes
===================================================================
--- Catalyst-Runtime/5.80/trunk/Changes	2008-12-09 23:36:52 UTC (rev 8808)
+++ Catalyst-Runtime/5.80/trunk/Changes	2008-12-10 00:32:51 UTC (rev 8809)
@@ -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 

Modified: Catalyst-Runtime/5.80/trunk/lib/Catalyst.pm
===================================================================
--- Catalyst-Runtime/5.80/trunk/lib/Catalyst.pm	2008-12-09 23:36:52 UTC (rev 8808)
+++ Catalyst-Runtime/5.80/trunk/lib/Catalyst.pm	2008-12-10 00:32:51 UTC (rev 8809)
@@ -262,7 +262,9 @@
 
 =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 @@
 
 =head2 $c->setup_log
 
-Sets up log.
+Sets up log by instantiating a L<Catalyst::Log|Catalyst::Log> object and
+passing it to C<log()>. Pass in a comma-delimited list of levels to set the
+log to.
+ 
+This method also installs a C<debug> 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<setup_log> 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 @@
 
 chicks: Christopher Hicks
 
+David E. Wheeler
+
 dkubb: Dan Kubb <dan.kubb-cpan at onautopilot.com>
 
 Drew Taylor

Added: Catalyst-Runtime/5.80/trunk/t/unit_core_setup.t
===================================================================
--- Catalyst-Runtime/5.80/trunk/t/unit_core_setup.t	                        (rev 0)
+++ Catalyst-Runtime/5.80/trunk/t/unit_core_setup.t	2008-12-10 00:32:51 UTC (rev 8809)
@@ -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';




More information about the Catalyst-commits mailing list