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 に答える