Log :: Log4Perl различное назначение регистрации в зависимости от LogLevel - PullRequest
0 голосов
/ 28 февраля 2019

Моя цель - записать сообщения «debug» (и последующие уровни: info, warning, fatal, ...) в файл, но только «warnings» / fatal / error на экран.Оба одновременно.

Я пробовал с easy_init ( "стелс-логгинг" ):

Log::Log4perl->easy_init(
    { level => $DEBUG, file => ":utf8> ./log_" . basename($0) . "_.log" },
    { level => $WARN, file => 'STDOUT' },
);

... НО level второго определенияперезаписывает общий уровень журнала.

if (false){
    WARN "some bad thing";  # print this to the screen AND to the file
}else{
    do_something;
    DEBUG "doing something";    # print this just to the file
    if (bla){WARN "another bad thing"}
}

В этом случае предупреждение выводится на экран и в файл правильно, НО сообщение «DEBUG» не будет напечатано (perl 5.26)

Установка { level => $DEBUG ... после строки {level => $WARN ..., все предупреждения и сообщения об ошибках выводятся на экран и в файл.

Может кто-нибудь подсказать мне, как это сделать (если возможно))?Нужно ли уточнить?

1 Ответ

0 голосов
/ 28 февраля 2019

Следующий минимальный рабочий пример Perl:

  • печать в файл DEBUG и более высокие уровни
  • печать на экран WARN и более высокие уровни

я не сделалне используйте easy_init, поскольку подробная конфигурация более детальна.У меня есть комментарии в сценарии, которые описывают, что делает конфигурация.Дайте мне знать, если потребуется более подробная информация.

use strict;
use Log::Log4perl qw(:easy);

# rootlogger prints to "Logfile" and "Screen"
# "Logfile" and "Screen" are then defined with the proper appender (File and Screen)
# and the proper Threshold is used to limit what goes in each appender

my $conf = q(
log4perl.rootLogger=DEBUG,Logfile,Screen

log4perl.appender.Logfile           = Log::Log4perl::Appender::File
log4perl.appender.Logfile.filename  = /home/USER/test.log
log4perl.appender.Logfile.mode      = append
log4perl.appender.Logfile.utf8      = 1
log4perl.appender.Logfile.Threshold = DEBUG
log4perl.appender.Logfile.recreate  = 1
log4perl.appender.Logfile.layout    = Log::Log4perl::Layout::SimpleLayout

log4perl.appender.Screen            = Log::Log4perl::Appender::Screen
log4perl.appender.Screen.stderr     = 0
log4perl.appender.Screen.Threshold  = WARN
log4perl.appender.Screen.layout     = Log::Log4perl::Layout::SimpleLayout
);
Log::Log4perl::init( \$conf );

my $logger = Log::Log4perl->get_logger( 'foo' );

WARN "some bad thing";      # print this to the screen AND to the file
DEBUG "doing something";    # print this just to the file
~ $ perl log4perl.pl
WARN - some bad thing

~ $ cat test.log 
WARN - some bad thing
DEBUG - doing something

Версии

Я тестировал с:

  • ОС: Ubuntu 14.04.5 LTS
  • perl: v5.18.2
  • Log :: Log4perl: 1,49 (и 1,41)
...