in reply to Log4Perl Naming an Eval

If configured with PatternLayout, Log::Log4perl will use Perl's caller($depth) function internally to obtain the name of the function/method where the logging statement is located in at runtime.

Since caller($depth) returns "(eval)" as the subroutine name if you're within an eval {}, Log::Log4perl will display "(eval)".

There's a nasty trick you could use to bump up the caller level and have it return the calling function:
use Log::Log4perl qw(:easy); Log::Log4perl->easy_init( { level => $DEBUG, layout => "%M: %m%n", }); foo(); sub foo { eval { local $Log::Log4perl::caller_depth = $Log::Log4perl::caller_depth + 1; DEBUG("I'm here!"); }; }
This will print
main::foo: I'm here!
as expected. However, there's several things to consider: Check the log4perl-devel@lists.sourceforge.net mailing list for updates.

Replies are listed 'Best First'.
Re: Re: Log4Perl Naming an Eval
by set_uk (Pilgrim) on Feb 03, 2004 at 11:56 UTC
    thanks will do