如何使用log4perl将FATAL事件记录到单独的文件中

时间:2014-04-13 09:03:11

标签: perl logging log4perl

我正在使用log4perl,我想在单独的文件中记录所有FATAL事件。

这是我的剧本:

#!/usr/bin/perl

use strict;
use warnings FATAL => 'all';

use Log::Log4perl qw(get_logger);

Log::Log4perl::init('log4perl.conf');

my $l_aa = get_logger('AA');
$l_aa->fatal('fatal');

my $l_bb = get_logger('BB');
$l_bb->info('info');

这是我的配置文件:

## What to log

    log4perl.logger         = FATAL, FatalLog
    log4perl.logger.BB      = INFO, MainLog

## Logger MainLog

    log4perl.appender.MainLog          = Log::Log4perl::Appender::File
    log4perl.appender.MainLog.filename = log4perl_main.log

    log4perl.appender.MainLog.layout = PatternLayout

    log4perl.appender.MainLog.layout.ConversionPattern = \
        [%d{yyyy-MM-dd HH:mm:ss}] %p - %c - %m%n

## Logger FatalLog

    log4perl.appender.FatalLog          = Log::Log4perl::Appender::File
    log4perl.appender.FatalLog.filename = log4perl_fatal.log

    log4perl.appender.FatalLog.layout = PatternLayout

    log4perl.appender.FatalLog.layout.ConversionPattern = \
        [%d{yyyy-MM-dd HH:mm:ss}] %p - %c - %m%n

我希望通过此设置,文件log4perl_fatal.log将只获得FATAL级事件。但这是我在运行脚本后得到的结果:

$ tail -f *log
==> log4perl_fatal.log <==
[2014-04-13 08:41:22] FATAL - AA - fatal
[2014-04-13 08:41:22] INFO - BB - info

==> log4perl_main.log <==
[2014-04-13 08:41:22] INFO - BB - info

为什么我要在log4perl_fatal.log中获得INFO级别的活动?

如何在单独的文件中仅记录FATAL级事件?

PS这是一个带有此脚本的GitHub repo&amp;配置。

2 个答案:

答案 0 :(得分:2)

您的conf文件包含以下行:

log4perl.logger         = FATAL, FatalLog

您需要的是以下内容:

log4perl.logger.AA      = FATAL, FatalLog

否则,FatalLog将成为两个记录器的全能型,而不是与此实例隔离:

my $l_aa = get_logger('AA');

答案 1 :(得分:0)

这是log4perl常见问题解答中涵盖的问题 - https://metacpan.org/pod/Log::Log4perl::FAQ#How-can-I-collect-all-FATAL-messages-in-an-extra-log-file

在示例中log4perl_fatal.log因为appender可加性而获得INFO级事件。

要解决此问题,应将此行添加到配置文件中:

log4perl.appender.FatalLog.Threshold = FATAL

然后输出文件得到预期的输出:

$ tail log4perl*log
==> log4perl_fatal.log <==
[2014-05-04 20:00:39] FATAL - AA - fatal

==> log4perl_main.log <==
[2014-05-04 20:00:39] INFO - BB - info