|
From: Steve C. <sch...@gm...> - 2011-07-22 17:01:02
|
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,
--
Steve Chadsey <sch...@gm...>
|