On Thu, 18 Oct 2012, BENNING, Markus wrote:

I also would suggest to introduce a flag to avoid breaking existing
code.  Since the option will be documented in the pod the behavior
should be clear.

Done, will be released with 1.39:

    
https://github.com/mschilli/log4perl/commit/33a34e0ea50fc785376abc9456bd7711193ba29e

Let me know if it works for you ...

--
-- Mike

Mike Schilli
m...@perlmeister.com


Markus

-----Ursprüngliche Nachricht-----
Von: Mike Schilli [mailto:m...@perlmeister.com]
Gesendet: Donnerstag, 18. Oktober 2012 09:29
An: BENNING, Markus
Cc: log4perl-devel@lists.sourceforge.net
Betreff: Re: [log4perl-devel] logcroak always stringifies when croak()ing

On Mon, 15 Oct 2012, BENNING, Markus (ext) wrote:

Shouldn't logcroak log a stringified version and call croak on the
value you passed to it instead of calling croak on the log message?

I guess that makes sense if you're using it for throwing exceptions, but I've 
never used it that way and that's the reason why logcroak() (and its
companions) is using Log::Log4perl::Logger::warning_render() to format the 
message before it passes it to croak() et al.

Of course, that's not easy to change now, because some people rely on the 
feature, but as a horrible hack, you could use something like

    { no warnings qw( redefine );
        *Log::Log4perl::Logger::warning_render = sub {
            return $_[1];
        }
    }

We should probably provide a flag you can set. What do you think?

The docs say: "Finally, there's the Carp functions that do just what
the Carp functions do, but with logging:"

Fixed!

https://github.com/mschilli/log4perl/commit/56c95a2d131678c4908785695fac0e56175c7b44

--
-- Mike

Mike Schilli
m...@perlmeister.com

I noticed that logcroak (die,confess...) always die()s with a
stringified version of what you pass to it.

Here's an example:

---
#!/usr/bin/env perl

package Status;

use Moose;

use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init($ERROR);

use Carp;

use overload
   q{""}    => sub { $_[0]->as_string },
   fallback => 1;

has 'logger' => (
       is => 'ro', isa => 'Log::Log4perl::Logger', lazy => 1,
       default => sub {
               return( Log::Log4perl->get_logger('Status') );
       },
);

has code => ( is => 'ro', isa => 'Int', required => 1 ); has message
=> ( is => 'ro', isa => 'Str', required => 1 );

sub as_string {
   my ($self) = @_;
   return ( sprintf( 'Status: %s (%s)', $self->message, $self->code )
); }

sub throw {
       my $self = shift;
       croak($self);
}

sub throw_log4perl {
       my $self = shift;
       $self->logger->logcroak($self); }

package main;

use Data::Dumper;

my $s = Status->new( code => 500, message => 'Foobar');

eval { $s->throw };
print Dumper($@);

eval { $s->throw_log4perl };
print Dumper($@);
--- END

--- Output:
$VAR1 = bless( {
                'message' => 'Foobar',
                'code' => 500
              }, 'Status' );
2012/10/15 12:19:41 ESB Error: Foobar (500) at log4perl-test.pl line
50
$VAR1 = 'ESB Error: Foobar (500) at log4perl-test.pl line 50 ';
---

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
log4perl-devel mailing list
log4perl-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/log4perl-devel

Reply via email to