【问题标题】:Defining multiple log levels in Log4Perl在 Log4Perl 中定义多个日志级别
【发布时间】:2017-01-25 14:21:37
【问题描述】:

我有以下用于多个脚本的 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

脚本使用此代码 sn-p 对其进行初始化:

use Log::Log4perl;
# Logger configuration
Log::Log4perl->init('/etc/log4perl.conf');
$logger = Log::Log4perl->get_logger();

由于有多个脚本使用相同的配置,因此无需每次都修改配置文件来调整日志记录级别的最佳方法是什么?

我可以创建一个新的记录器并让脚本使用那个记录器而不是根记录器吗?

【问题讨论】:

  • 您是说要临时更改日志记录级别(例如在单个脚本的一小部分中)而不更改配置?或者您想要为每个脚本使用单独的记录器?
  • 我希望能够临时更改单个脚本的日志记录级别,而不会影响其他脚本。不确定实现这一目标的最佳方法。

标签: perl log4perl


【解决方案1】:

您可以使用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_levelless_logging/dec_level 方法,它们采用增量值而不是绝对日志记录级别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多