2014-04-13 3 views
0

log4perl을 사용하고 있으며 모든 치명적인 이벤트를 별도의 파일에 기록하려고합니다. 여기FATAL 이벤트를 기록하여 log4perl로 파일을 분리하는 방법

#!/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'); 

그리고 내 설정 파일입니다 :이 설정을 사용하여 파일 log4perl_fatal.log은 FATAL 수준의 이벤트를 얻을 것이다 기대하고 있습니다

## 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 

여기 내 스크립트입니다.

$ 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 레벨의 이벤트를 받고 있어요 :하지만 여기에 내가 스크립트를 실행 한 후 얻을 무엇인가?

어떻게 치명적인 이벤트 만 별도의 파일에 기록 할 수 있습니까?

추신 : GitHub repo이 스크립트는 & 구성입니다. 그렇지 않으면

log4perl.logger.AA  = FATAL, FatalLog 

에서, FatalLog가 대신 고립의, 포괄 모두 로거된다 :

log4perl.logger   = FATAL, FatalLog 

당신이 필요로하는 것은 다음과 같다 :

답변

0

이 질문은 log4perl FAQ - https://metacpan.org/pod/Log::Log4perl::FAQ#How-can-I-collect-all-FATAL-messages-in-an-extra-log-file

예에서 log4perl_fatal.log은 appender additivity 때문에 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 
2

귀하의 conf 파일에 다음 라인을 가지고 이 인스턴스 :

my $l_aa = get_logger('AA'); 
+0

매우 감사를! 나는 이해하기 시작했다. 그러나 나는 아직도 질문을 가지고있다. 승인. 그래서 제 설정에서'FatalLog'는 모든 로거를 잡아 먹는 것입니다. 그러나 'INFO'수준의 이벤트를 기록하는 이유는 무엇입니까? – bessarabov