Tiny document update to make it a bit clearer how one overrides the standard
[catagits/Catalyst-Runtime.git] / lib / Catalyst.pm
index 0226ba1..179c7ac 100644 (file)
@@ -471,10 +471,16 @@ L<Catalyst::Engine>.
 
 =head2 $c->log
 
-Returns the logging object instance. Unless it is already set, Catalyst
-sets this up with a L<Catalyst::Log> object. To use your own log class:
+Returns the logging object instance. Unless it is already set, Catalyst sets
+this up with a L<Catalyst::Log> object. To use your own log class, set the
+logger with the C<< __PACKAGE__->log >> method prior to calling
+C<< __PACKAGE__->setup >>.
+
+ __PACKAGE__->log( MyLogger->new );
+ __PACKAGE__->setup;
+
+And later:
 
-    $c->log( MyLogger->new );
     $c->log->info( 'Now logging with my own logger!' );
 
 Your log class should implement the methods described in the
@@ -934,15 +940,20 @@ sub execute {
         }
 
         # determine if the call was the result of a forward
-        my $callsub_index = ( caller(0) )[0]->isa('Catalyst::Action') ? 2 : 1;
-        if ( ( caller($callsub_index) )[3] =~ /^NEXT/ ) {
-
-            # work around NEXT if execute was extended by a plugin
-            $callsub_index += 3;
+        # this is done by walking up the call stack and looking for a calling
+        # sub of Catalyst::forward before the eval
+        my $callsub = q{};
+        for my $index ( 1 .. 10 ) {
+            last
+              if ( ( caller($index) )[0] eq 'Catalyst'
+                && ( caller($index) )[3] eq '(eval)' );
+
+            if ( ( caller($index) )[3] =~ /forward$/ ) {
+                $callsub = ( caller($index) )[3];
+                $action  = "-> $action";
+                last;
+            }
         }
-        my $callsub = ( caller($callsub_index) )[3];
-
-        $action = "-> $action" if $callsub =~ /forward$/;
 
         my $node = Tree::Simple->new(
             {