prchou83 has asked for the wisdom of the Perl Monks concerning the following question:

Hello respected Perl Monks, I use Devel::Cover for my unit test coverage analysis as below:

perl -MDevel::Cover testfile.t
which gives me excellent results. But problem pops up when the code which testfile.t is testing uses log4perl for its logging needs. Looks like while generating coverage report Devel::Cover refers a Logger object which is already destroyed and throws an error...
Log4perl: Seems like no initialization happened. Forgot to call init() +? Use of uninitialized value in subroutine entry at somepath/perl5/PROJ/ +Log-Log4perl/1.30/lib/perl5/Log/Log4perl.pm line 132. Use of uninitialized value in subroutine entry at somepath/perl5/PROJ/ +Log-Log4perl/1.30/lib/perl5/Log/Log4perl.pm line 132. Undefined subroutine &main:: called at somepath/perl5/PROJ/Log-Log4per +l/1.30/lib/perl5/Log/Log4perl.pm line 132.

Has anyone experienced this issue with Devel::Cover when used in conjuction with Log4Perl or am I missing some basic thing? is there any workaround for this?

Replies are listed 'Best First'.
Re: facing problem with Devel::Cover when used with Log4Perl
by SriniK (Beadle) on Mar 29, 2011 at 15:46 UTC
    Did you tried with configuration file. I have use the log4perl but not the other one.

      Hi SriniK, I am using log4perl using the configuration file only. There is no issue with log4perl if test cases are run without Devel::Cover.

        Hi
        i have tried log4perl in my perl file itself with out any configuration file. And i have install Devel::Cover and it seems fine. See the result
        root@uniliver-rt39:~/RT/Bin# perl -MDevel::Cover Command_rt.pl Devel::Cover 0.73: Collecting coverage data for branch, condition, pod +, statement, subroutine and time. Selecting packages matching: Ignoring packages matching: /Devel/Cover[./] Ignoring packages in: . /etc/perl /usr/lib/perl/5.10.1 /usr/lib/perl5 /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/share/perl/5.10.1 /usr/share/perl5 <tr><td align='center'>001</td><td align='center'>1007</td><td align=' +center'>SAT_CR</td><td align='center'>new</td><td align='center'>fgfh +h - CR</td><td>2011-03-29 16:17:27</td><td align='center'>RT_System</ +td></tr> <tr><td align='center'>001</td><td align='center'>1007</td><td align=' +center'>SAT_CR</td><td align='center'>new</td><td align='center'>fgfh +h - CR</td><td>2011-03-29 16:17:27</td><td align='center'>RT_System</ +td></tr> <tr><td align='center'>002</td><td align='center'>1009</td><td align=' +center'>SAT_CR</td><td align='center'>new</td><td align='center'>- CR +</td><td>2011-03-29 16:17:37</td><td align='center'>RT_System</td></t +r> <tr><td align='center'>001</td><td align='center'>1007</td><td align=' +center'>SAT_CR</td><td align='center'>new</td><td align='center'>fgfh +h - CR</td><td>2011-03-29 16:17:27</td><td align='center'>RT_System</ +td></tr> <tr><td align='center'>002</td><td align='center'>1009</td><td align=' +center'>SAT_CR</td><td align='center'>new</td><td align='center'>- CR +</td><td>2011-03-29 16:17:37</td><td align='center'>RT_System</td></t +r> <tr><td align='center'>003</td><td align='center'>1063</td><td align=' +center'>SAT</td><td align='center'>new</td><td align='center'>test</t +d><td>2011-03-29 20:56:36</td><td align='center'>Srinivasan</td></tr> 3 tickets avialable with out a owner. Mail sent to corresponding peopl +e. Devel::Cover: Writing coverage database to /root/RT/Bin/cover_db/runs/ +1301494354.19595.31253 ---------------------------- ------ ------ ------ ------ ------ ------ + ------ File stmt bran cond sub pod time + total ---------------------------- ------ ------ ------ ------ ------ ------ + ------ Command_rt.pl 91.9 50.0 50.0 100.0 n/a 100.0 + 86.2 Total 91.9 50.0 50.0 100.0 n/a 100.0 + 86.2 ---------------------------- ------ ------ ------ ------ ------ ------ + ------
        My Log4perl setting in my perl file seems like this
        our $con = q( ############################################################ # A simple root logger with a Log::Log4perl::Appender::File # file appender in Perl. ############################################################ log4perl.rootLogger=ALL, LOGFILE log4perl.appender.LOGFILE=Log::Log4perl::Appender::File log4perl.appender.Logfile.filename = log4perl.appender.LOGFILE.filename= sub {&file;} log4perl.appender.LOGFILE.mode=append log4perl.appender.LOGFILE.layout = Log::Log4perl::Layout::Pa +tternLayout log4perl.appender.LOGFILE.layout.ConversionPattern =[%d][%L][% +p]-## %m ##%n log4perl.appender.Screen = Log::Log4perl::Appender::Sc +reen log4perl.appender.Screen.layout = Log::Log4perl::Layout::Patte +rnLayout log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout.ConversionPattern =%L,[%p], %m +%n ); Log::Log4perl::init( \$con ); $logger = Log::Log4perl->get_logger($0);


        Thanks,
        Srini K