0

我正在使用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

为什么我会收到 INFO 级别的事件log4perl_fatal.log

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

PS 这是一个带有此脚本和配置的GitHub 存储库。

4

2 回答 2

2

您的 conf 文件具有以下行:

log4perl.logger         = FATAL, FatalLog

您需要的是以下内容:

log4perl.logger.AA      = FATAL, FatalLog

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

my $l_aa = get_logger('AA');
于 2014-04-14T07:33:51.447 回答
0

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

在示例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
于 2014-05-04T20:04:11.550 回答