On Tue, 23 Nov 2010, Kevin Goess wrote:

> Any opinion on this?  Or should we stay with the uninitialized
> warning, however unhelpful it is?

I'm in favor of getting a warning in this case, at least with 'use
warnings' mode.

It's similar to

     use warnings;
     print "The value is $value.\n";

where I would expect a warning if $value was undefined.

The warning should point me to the location of
the actual INFO call and not to somewhere within the guts of Log4perl,
though ... :)

-- Mike

Mike Schilli
m...@perlmeister.com

> This is kind of annoying thing that I noticed recently, if you do
> $logger->info($msg) and $msg is undefined then you get a warning:
>
> perl -W -Ilib -e 'use Log::Log4perl qw(:easy); 
> Log::Log4perl->easy_init($INFO); INFO(undef)'
> Use of uninitialized value in join or string at lib/Log/Log4perl/Appender.pm 
> line 167.
>
> and it's not even a very helpful warning since it's buried in the guts of 
> Log4perl.
>
> Using git bisect (neat tool) I found while I (myself even!) had fixed the 
> issue back in
> 029d7df8 in 2002, I broke it (me again!) in afb95ef7e in 2003.
>
> Anyway, this would be the correct fix for it now, if all we're going to do is 
> make a
> string out of it, it's ok just to use the defined bits of the mssage.
>
...
>
> diff --git a/lib/Log/Log4perl/Appender.pm b/lib/Log/Log4perl/Appender.pm
> index 923836f..455fd09 100644
> --- a/lib/Log/Log4perl/Appender.pm
> +++ b/lib/Log/Log4perl/Appender.pm
> @@ -162,10 +162,13 @@ sub log {
>             #not defined, the normal case
>         if (! defined $self->{warp_message} ){
>                 #join any message elements
> -            $p->{message} =
> -                join($Log::Log4perl::JOIN_MSG_ARRAY_CHAR,
> -                     @{$p->{message}}
> -                     ) if ref $p->{message} eq "ARRAY";
> +            if (ref $p->{message} eq "ARRAY"){
> +               $p->{message} =
> +                    join($Log::Log4perl::JOIN_MSG_ARRAY_CHAR,
> +                        grep { defined $_ }
> +                            @{$p->{message}}
> +                    );
> +            }
>
>             #defined but false, e.g. Appender::DBI
>         } elsif (! $self->{warp_message}) {
>
>
> If nobody objects I can make a unit test for it as well and push it to Mike 
> via github.
>
>
>
> --
> Kevin G.
>
> ------------------------------------------------------------------------------
> Increase Visibility of Your 3D Game App & Earn a Chance To Win $500!
> Tap into the largest installed PC base & get more eyes on your game by
> optimizing for Intel(R) Graphics Technology. Get started today with the
> Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs.
> http://p.sf.net/sfu/intelisp-dev2dev
> _______________________________________________
> log4perl-devel mailing list
> log4perl-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/log4perl-devel
>

------------------------------------------------------------------------------
Increase Visibility of Your 3D Game App & Earn a Chance To Win $500!
Tap into the largest installed PC base & get more eyes on your game by
optimizing for Intel(R) Graphics Technology. Get started today with the
Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs.
http://p.sf.net/sfu/intelisp-dev2dev
_______________________________________________
log4perl-devel mailing list
log4perl-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/log4perl-devel

Reply via email to