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

Reply via email to