From: Johannes K. <Jo....@gm...> - 2007-11-23 10:51:17
|
Hi, I've encounterd a view problems with "uninitialized root-logger" log-log4perl (currently using Version1.12): System: ActiveStatePerl 5.8.8.817 WinXP SP2 Log::Log4Perl 1.12 Using my "traditional" log4perl configuration file (used from 0.51 on) the 1.12 Version shows following behaviour (which I didn't notice with earlier versions ...): 1.) Initializing log4perl works without any errors 2.) Getting loggers works without any errors 3.) Using $logger->logdie(...) (and other functions dieing, like $logger->error_die(...)) makes the program die IMMEDIATELY; I'm not able to catch the die-exception within an eval{} block -> WHY??? - I'm sure it worked with earlier versions of log4perl .. 4.) Finishing my program an error from log4perl occurs: (in cleanup) Internal error: Root Logger not initialized. at C:/Programme/Perl/site/lib/Log/Log4perl/Logger.pm line 557 during global destruction. What's going on? What can I do to make $logger->logdie(...) to be catchable with eval{} again? Any help welcome ... Johannes As an appendix, my Log4perl-configuration (quite complex): <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE log4perl:configuration SYSTEM "log4perl.dtd"> <log4perl:configuration xmlns:log4perl="http://log4perl.sourceforge.net/" threshold="debug" oneMessagePerAppender="true"> <!--- *************************************************************************************** --> <!-- *** APPENDER ************************************************************************** --> <!-- *************************************************************************************** --> <log4perl:appender name="AppGeneralFile" class="Log::Log4perl::Appender::File"> <param name="filename" value="sub { Vitronic::BuildSteps::MiscBuildStep::getLogfileName('TYPE' => 'FULL'); };" /> <param name="mode" value="write" /> <param name="autoflush" value="1" /> <filter-ref id="FilterInfo" /> <log4perl:layout name="LayoutDateTimeClass" class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %p [%c]: %m%n" /> </log4perl:layout> </log4perl:appender> <log4perl:appender name="AppErrorFile" class="Log::Log4perl::Appender::File"> <param name="filename" value="sub { Vitronic::BuildSteps::MiscBuildStep::getLogfileName('TYPE' => 'ERR'); };" /> <param name="mode" value="write" /> <param name="autoflush" value="1" /> <filter-ref id="FilterErr" /> <log4perl:layout name="LayoutDateTimeClass" class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %p [%c]: %m%n" /> </log4perl:layout> </log4perl:appender> <log4perl:appender name="AppGeneralScreen" class="Log::Log4perl::Appender::Screen"> <filter-ref id="FilterInfo" /> <log4perl:layout name="LayoutDateTimeClass" class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %p [%c]: %m%n" /> </log4perl:layout> </log4perl:appender> <log4perl:appender name="AppDebugFile" class="Log::Log4perl::Appender::File"> <param name="filename" value="sub { Vitronic::BuildSteps::MiscBuildStep::getLogfileName('TYPE' => 'DEBUG'); };" /> <param name="mode" value="write" /> <param name="autoflush" value="1" /> <filter-ref id="FilterAll" /> <log4perl:layout name="LayoutDateTimeClass" class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{HH:mm:ss} [%c] %p: %m%n" /> </log4perl:layout> </log4perl:appender> <log4perl:appender name="AppSqlFile" class="Log::Log4perl::Appender::File"> <param name="filename" value="sub { Vitronic::BuildSteps::MiscBuildStep::getLogfileName('TYPE' => 'SQL'); };" /> <param name="mode" value="write" /> <param name="autoflush" value="1" /> <filter-ref id="FilterAll" /> <log4perl:layout name="LayoutDateTimeClass" class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %p [%c]: %m%n" /> </log4perl:layout> </log4perl:appender> <!-- *** FILTER **************************************************************************** --> <log4perl:appender name="DebugSyncer" class="Log::Log4perl::Appender::Synchronized"> <param name="appender" value="AppDebugFile" /> </log4perl:appender> <!-- *************************************************************************************** --> <!-- *** FILTER **************************************************************************** --> <!-- *************************************************************************************** --> <log4perl:filter name="FilterAll" class="Log::Log4perl::Filter::LevelRange"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="FATAL" /> <param name="AcceptOnMatch" value="true" /> </log4perl:filter> <log4perl:filter name="FilterInfo" class="Log::Log4perl::Filter::LevelRange"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="FATAL" /> <param name="AcceptOnMatch" value="true" /> </log4perl:filter> <log4perl:filter name="FilterErr" class="Log::Log4perl::Filter::LevelRange"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="FATAL" /> <param name="AcceptOnMatch" value="true" /> </log4perl:filter> <!-- *************************************************************************************** --> <!-- *** CATEGORIES ************************************************************************ --> <!-- *************************************************************************************** --> <root> <priority value="debug" /> <appender-ref ref="AppGeneralFile" /> <appender-ref ref="AppGeneralScreen" /> <appender-ref ref="AppErrorFile" /> </root> <!--- *************************************************************************************** --> <category name="dbg" additivity="false"> <priority value="debug" /> <appender-ref ref="AppDebugFile" /> </category> <category name="sql" additivity="false"> <priority value="debug" /> <appender-ref ref="AppDebugFile" /> </category> <category name="BMTK"> <priority value="info" /> <appender-ref ref="AppGeneralFile" /> </category> <category name="Vitronic::BuildDatenbank::Tables" additivity="false"> <priority value="info" /> <appender-ref ref="AppSqlFile" /> </category></log4perl:configuration> -- GMX FreeMail: 1 GB Postfach, 5 E-Mail-Adressen, 10 Free SMS. Alle Infos und kostenlose Anmeldung: http://www.gmx.net/de/go/freemail |
From: Mike S. <m...@pe...> - 2007-12-01 00:39:47
|
On Fri, 23 Nov 2007, Johannes Kilian wrote: > Using my "traditional" log4perl configuration file (used from 0.51 > on) the 1.12 Version shows following behaviour (which I didn't > notice with earlier versions ...): > 1.) Initializing log4perl works without any errors > 2.) Getting loggers works without any errors > 3.) Using $logger->logdie(...) (and other functions dieing, like $logger->error_die(...)) makes the program die IMMEDIATELY; I'm not able to catch the die-exception within an eval{} block -> WHY??? - I'm sure it worked with earlier versions of log4perl .. Hmm, the following works for me: use Log::Log4perl qw(:easy); Log::Log4perl->easy_init($DEBUG); eval { LOGDIE "Waah!"; }; print "Survived!\n"; and prints 2007/11/30 17:38:48 Waah! Survived! Do you have a __DIE__ handler defined somewhere by any chance? -- Mike Mike Schilli m...@pe... > 4.) Finishing my program an error from log4perl occurs: (in cleanup) Internal error: Root Logger not initialized. at C:/Programme/Perl/site/lib/Log/Log4perl/Logger.pm line 557 during global destruction. > > What's going on? What can I do to make $logger->logdie(...) to be catchable with eval{} again? > > Any help welcome ... > > Johannes > > As an appendix, my Log4perl-configuration (quite complex): > > <?xml version="1.0" encoding="utf-8"?> > <!DOCTYPE log4perl:configuration SYSTEM "log4perl.dtd"> > <log4perl:configuration xmlns:log4perl="http://log4perl.sourceforge.net/" > threshold="debug" > oneMessagePerAppender="true"> > <!--- *************************************************************************************** --> > <!-- *** APPENDER ************************************************************************** --> > <!-- *************************************************************************************** --> > <log4perl:appender name="AppGeneralFile" > class="Log::Log4perl::Appender::File"> > <param name="filename" > value="sub { Vitronic::BuildSteps::MiscBuildStep::getLogfileName('TYPE' => 'FULL'); };" /> > <param name="mode" > value="write" /> > <param name="autoflush" > value="1" /> > <filter-ref id="FilterInfo" /> > <log4perl:layout name="LayoutDateTimeClass" > class="org.apache.log4j.PatternLayout"> > <param name="ConversionPattern" > value="%d %p [%c]: %m%n" /> > </log4perl:layout> > </log4perl:appender> > <log4perl:appender name="AppErrorFile" > class="Log::Log4perl::Appender::File"> > <param name="filename" > value="sub { Vitronic::BuildSteps::MiscBuildStep::getLogfileName('TYPE' => 'ERR'); };" /> > <param name="mode" > value="write" /> > <param name="autoflush" > value="1" /> > <filter-ref id="FilterErr" /> > <log4perl:layout name="LayoutDateTimeClass" > class="org.apache.log4j.PatternLayout"> > <param name="ConversionPattern" > value="%d %p [%c]: %m%n" /> > </log4perl:layout> > </log4perl:appender> > <log4perl:appender name="AppGeneralScreen" > class="Log::Log4perl::Appender::Screen"> > <filter-ref id="FilterInfo" /> > <log4perl:layout name="LayoutDateTimeClass" > class="org.apache.log4j.PatternLayout"> > <param name="ConversionPattern" > value="%d %p [%c]: %m%n" /> > </log4perl:layout> > </log4perl:appender> > <log4perl:appender name="AppDebugFile" > class="Log::Log4perl::Appender::File"> > <param name="filename" > value="sub { Vitronic::BuildSteps::MiscBuildStep::getLogfileName('TYPE' => 'DEBUG'); };" /> > <param name="mode" > value="write" /> > <param name="autoflush" > value="1" /> > <filter-ref id="FilterAll" /> > <log4perl:layout name="LayoutDateTimeClass" > class="org.apache.log4j.PatternLayout"> > <param name="ConversionPattern" > value="%d{HH:mm:ss} [%c] %p: %m%n" /> > </log4perl:layout> > </log4perl:appender> > <log4perl:appender name="AppSqlFile" > class="Log::Log4perl::Appender::File"> > <param name="filename" > value="sub { Vitronic::BuildSteps::MiscBuildStep::getLogfileName('TYPE' => 'SQL'); };" /> > <param name="mode" > value="write" /> > <param name="autoflush" > value="1" /> > <filter-ref id="FilterAll" /> > <log4perl:layout name="LayoutDateTimeClass" > class="org.apache.log4j.PatternLayout"> > <param name="ConversionPattern" > value="%d %p [%c]: %m%n" /> > </log4perl:layout> > </log4perl:appender> > <!-- *** FILTER **************************************************************************** --> > <log4perl:appender name="DebugSyncer" > class="Log::Log4perl::Appender::Synchronized"> > <param name="appender" > value="AppDebugFile" /> > </log4perl:appender> > <!-- *************************************************************************************** --> > <!-- *** FILTER **************************************************************************** --> > <!-- *************************************************************************************** --> > <log4perl:filter name="FilterAll" > class="Log::Log4perl::Filter::LevelRange"> > <param name="LevelMin" > value="DEBUG" /> > <param name="LevelMax" > value="FATAL" /> > <param name="AcceptOnMatch" > value="true" /> > </log4perl:filter> > <log4perl:filter name="FilterInfo" > class="Log::Log4perl::Filter::LevelRange"> > <param name="LevelMin" > value="INFO" /> > <param name="LevelMax" > value="FATAL" /> > <param name="AcceptOnMatch" > value="true" /> > </log4perl:filter> > <log4perl:filter name="FilterErr" > class="Log::Log4perl::Filter::LevelRange"> > <param name="LevelMin" > value="ERROR" /> > <param name="LevelMax" > value="FATAL" /> > <param name="AcceptOnMatch" > value="true" /> > </log4perl:filter> > <!-- *************************************************************************************** --> > <!-- *** CATEGORIES ************************************************************************ --> > <!-- *************************************************************************************** --> > <root> > <priority value="debug" /> > <appender-ref ref="AppGeneralFile" /> > <appender-ref ref="AppGeneralScreen" /> > <appender-ref ref="AppErrorFile" /> > </root> > <!--- *************************************************************************************** --> > <category name="dbg" > additivity="false"> > <priority value="debug" /> > <appender-ref ref="AppDebugFile" /> > </category> > <category name="sql" > additivity="false"> > <priority value="debug" /> > <appender-ref ref="AppDebugFile" /> > </category> > <category name="BMTK"> > <priority value="info" /> > <appender-ref ref="AppGeneralFile" /> > </category> > <category name="Vitronic::BuildDatenbank::Tables" > additivity="false"> > <priority value="info" /> > <appender-ref ref="AppSqlFile" /> > </category></log4perl:configuration> > > > > > -- > GMX FreeMail: 1 GB Postfach, 5 E-Mail-Adressen, 10 Free SMS. > Alle Infos und kostenlose Anmeldung: http://www.gmx.net/de/go/freemail > |
From: Johannes K. <jo....@gm...> - 2007-12-04 06:46:34
|
Hi, Mike Schilli schrieb: > On Fri, 23 Nov 2007, Johannes Kilian wrote: > >> Using my "traditional" log4perl configuration file (used from 0.51 >> on) the 1.12 Version shows following behaviour (which I didn't >> notice with earlier versions ...): >> 1.) Initializing log4perl works without any errors >> 2.) Getting loggers works without any errors >> 3.) Using $logger->logdie(...) (and other functions dieing, like $logger->error_die(...)) makes the program die IMMEDIATELY; I'm not able to catch the die-exception within an eval{} block -> WHY??? - I'm sure it worked with earlier versions of log4perl .. > > Hmm, the following works for me: > > use Log::Log4perl qw(:easy); > Log::Log4perl->easy_init($DEBUG); > > eval { > LOGDIE "Waah!"; > }; > > print "Survived!\n"; > > and prints > > 2007/11/30 17:38:48 Waah! > Survived! > > Do you have a __DIE__ handler defined somewhere by any chance? > No - no __DIE__ handler within my own perl-modules/perl files. Perhaps there might be some troublesome __DIE__ handler within the officiall perl modules (installed in Perl\lib or Perl\site\lib) - But how can I find out which one is it? > >> 4.) Finishing my program an error from log4perl occurs: (in cleanup) Internal error: Root Logger not initialized. at C:/Programme/Perl/site/lib/Log/Log4perl/Logger.pm line 557 during global destruction. >> How can I avoid the internal error above? Perhaps the uninitialized root logger causes the erroneous exception handling as described in point 3.)? Thanks Johannes |
From: Mike S. <m...@pe...> - 2007-12-04 16:34:58
|
On Tue, 4 Dec 2007, Johannes Kilian wrote: > No - no __DIE__ handler within my own perl-modules/perl files. Perhaps > there might be some troublesome __DIE__ handler within the officiall > perl modules (installed in Perl\lib or Perl\site\lib) - But how can > I find out which one is it? Trace it: PERLDB_OPTS="NonStop=1 AutoTrace=1 frame=2" perl -dS program > >> 4.) Finishing my program an error from log4perl occurs: (in cleanup) Internal error: Root Logger not initialized. at C:/Programme/Perl/site/lib/Log/Log4perl/Logger.pm line 557 during global destruction. > >> > > How can I avoid the internal error above? > Perhaps the uninitialized root logger causes the erroneous exception > handling as described in point 3.)? I'm not sure how you get there - is there an easy way for me to reproduce this problem? -- Mike Mike Schilli m...@pe... |