我有以下log4perl.conf配置文件,我用于多个脚本。它配置为显示来自所有日志级别的消息。
# Log4perl configuration file
log4perl.rootLogger = ALL, screen, file
log4perl.appender.screen = Log::Log4perl::Appender::Screen
log4perl.appender.screen.stderr = 0
log4perl.appender.screen.layout = PatternLayout
log4perl.appender.screen.layout.ConversionPattern = %d %p> %m%n
log4perl.appender.file = Log::Log4perl::Appender::File
log4perl.appender.file.filename = sub { my $script=$0; $script =~ s/(dev|test|prod)\/script/log/; $script =~ s/\.[^.]+$//; return "$script.log" }
log4perl.appender.file.mode = append
log4perl.appender.file.layout = PatternLayout
log4perl.appender.file.layout.ConversionPattern = %d %p> %m%n
脚本使用此代码段对其进行初始化:
use Log::Log4perl;
# Logger configuration
Log::Log4perl->init('/etc/log4perl.conf');
$logger = Log::Log4perl->get_logger();
调整日志记录级别的最佳方法是什么,而不必每次都修改配置文件,因为有多个脚本使用相同的配置。
我可以创建一个新的记录器并让脚本使用那个而不是根记录器吗?
答案 0 :(得分:0)
您可以使用level
方法调整程序中的日志记录级别:
use strict;
use warnings 'all';
use Log::Log4perl;
use Log::Log4perl::Level;
Log::Log4perl->init(\*DATA);
my $logger = Log::Log4perl->get_logger;
$logger->info('before');
$logger->level($INFO);
$logger->info('after');
__DATA__
log4perl.rootLogger = WARN, Screen
log4perl.appender.Screen = Log::Log4perl::Appender::Screen
log4perl.appender.Screen.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.Screen.layout.ConversionPattern = %d %p> %m%n
输出:
2017/01/25 12:59:58 INFO> after
这不会影响使用相同配置文件的其他脚本,因为它们每个都有自己的Log :: Log4perl实例。
或者,您可以使用more_logging
/ inc_level
或less_logging
/ dec_level
方法,这些方法采用delta值而不是绝对日志记录级别。