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
[email protected]
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/log4perl-devel