Hi Steve, you're using two different loggers, "SCRIPT" and "MODULE".
Your script sets the "SCRIPT" logger defined via log4perl.category.SCRIPT = ERROR, script in the configuration to level "INFO" in the main script: $logger->level("INFO"); This causes the main script to log at this level. But since your module logger stays on "ERROR", as defined in the configuration: log4perl.category.MODULE = ERROR, moduleDebug, moduleRest you're not seeing its log messages in your output. To set the "MODULE" logger to level "INFO" as well, you'd have to do something like use Log::Log4perl qw(get_logger); my $module_logger = get_logger("MODULE"); $module_logger->level( "INFO" ); in your main script (or something similar as you did with the "SCRIPT" logger in Logging.pm). After doing this, you'll see [2011-07-23 19:50:03] script.pl INFO: Calling logTest() [2011-07-23 19:50:03] Package INFO: info message [2011-07-23 19:50:03] Package WARN: warn message [2011-07-23 19:50:03] Package ERROR: error message as (hopefully) expected. Hope that helps. -- Mike Mike Schilli m...@perlmeister.com On Fri, 22 Jul 2011, Steve Chadsey wrote: > I have a script that "use"s various other modules. The script will > take a command-line argument that dictates the log level, i.e., "WARN", > "ERROR", etc. The script initializes a Log4perl instance using this level. > The script calls functions from the external modules, for which I would > like to have Log4perl log using the same log level that the calling script > has initialized. > > Here is a simple example of what I have: > > ---[start Logging.pm]----- > #!/usr/bin/perl -w > package Logging; > use strict; > use Log::Log4perl qw(get_logger :levels); > use base 'Exporter'; > > our @EXPORT_OK = qw($dbg_method_msg $logger statusMessage logMessage); > my $log_conf = q{ > log4perl.category.MODULE = ERROR, moduleDebug, moduleRest > # Filter to match level DEBUG > log4perl.filter.MatchDebug = Log::Log4perl::Filter::LevelMatch > log4perl.filter.MatchDebug.LevelToMatch = DEBUG > log4perl.filter.MatchDebug.AcceptOnMatch = true > > # Filter to match everything but DEBUG > log4perl.filter.MatchRest = Log::Log4perl::Filter::LevelMatch > log4perl.filter.MatchRest.LevelToMatch = DEBUG > log4perl.filter.MatchRest.AcceptOnMatch = false > > # layout for DEBUG messages > log4perl.appender.moduleDebug = Log::Log4perl::Appender::Screen > log4perl.appender.moduleDebug.layout = > Log::Log4perl::Layout::PatternLayout > log4perl.appender.moduleDebug.layout.ConversionPattern = > [%d{yyyy-MM-dd HH:mm:ss}] %M:%L %p: %m%n > log4perl.appender.moduleDebug.Filter = MatchDebug > log4perl.appender.moduleDebug.stderr = 0 > > > # Normal layout for the rest > log4perl.appender.moduleRest = Log::Log4perl::Appender::Screen > log4perl.appender.moduleRest.layout = > Log::Log4perl::Layout::PatternLayout > log4perl.appender.moduleRest.layout.ConversionPattern = > [%d{yyyy-MM-dd HH:mm:ss}] %C %p: %m%n > log4perl.appender.moduleRest.Filter = MatchRest > log4perl.appender.moduleRest.stderr = 0 > > log4perl.category.SCRIPT = ERROR, script > log4perl.appender.script = Log::Log4perl::Appender::Screen > log4perl.appender.script.stderr = 0 > log4perl.appender.script.layout = Log::Log4perl::Layout::PatternLayout > log4perl.appender.script.layout.ConversionPattern = [%d{yyyy-MM-dd > HH:mm:ss}] %F{1} %p: %m%n > }; > > Log::Log4perl->init( \$log_conf ); > > sub scriptInit > { > our $logger = get_logger("SCRIPT"); > } > 1; > ---[end Logging.pm]----- > > ---[start Package.pm]----- > #!/usr/bin/perl -w > package Package; > use strict; > use Carp qw( carp croak ); > use Logging; > use Log::Log4perl qw(get_logger ); > my $logger = Log::Log4perl->get_logger("MODULE"); > > use vars qw( @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS ); > use Exporter; > @ISA = qw(Exporter); > @EXPORT = qw(); > @EXPORT_OK = > qw( > logTest > ); > > sub logTest > { > $logger->info("info message"); > $logger->warn("warn message"); > $logger->error("error message"); > } > > 1; > ---[end Package.pm]----- > > ---[start script.pl]----- > #!/usr/bin/perl -w > use strict; > #use FindBin; > #use lib "$FindBin::RealBin/../../../lib"; > use Logging qw( $logger ); > use Package qw(logTest ); > > Logging->scriptInit(); > > $logger->level("INFO"); > $logger->info("Calling logTest()"); > logTest(); > ---[end]----- > > As it stands, the output of this script is: > > [2011-07-22 10:58:41] script.pl INFO: Calling logTest() > [2011-07-22 10:58:41] Package ERROR: error message > > What I want is: > > [2011-07-22 10:58:41] script.pl INFO: Calling logTest() > [2011-07-22 10:58:41] Package INFO: info message > [2011-07-22 10:58:41] Package WARN: warn message > [2011-07-22 10:58:41] Package ERROR: error message > > How can I do that? > > Thanks, > ------------------------------------------------------------------------------ Magic Quadrant for Content-Aware Data Loss Prevention Research study explores the data loss prevention market. Includes in-depth analysis on the changes within the DLP market, and the criteria used to evaluate the strengths and weaknesses of these DLP solutions. http://www.accelacomm.com/jaw/sfnl/114/51385063/ _______________________________________________ log4perl-devel mailing list log4perl-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/log4perl-devel