|
From: Mike S. <m...@pe...> - 2012-10-20 06:51:00
|
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...@pe...
>
> Markus
>
> -----Ursprüngliche Nachricht-----
> Von: Mike Schilli [mailto:m...@pe...]
> Gesendet: Donnerstag, 18. Oktober 2012 09:29
> An: BENNING, Markus
> Cc: log...@li...
> 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...@pe...
>
>> 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 ';
>> ---
>>
> |