2017-01-25 3 views
2

У меня есть следующий файл конфигурации log4perl.conf, который я использую для нескольких сценариев. Он настроен на отображение сообщений со всех уровней журнала.Определение нескольких уровней журнала в Log4Perl

# Log4perl configuration file 

log4perl.rootLogger = ALL, screen, file 

log4perl.appender.screen = Log::Log4perl::Appender::Screen 
log4perl.appender.screen.stderr = 0 
log4perl.appender.screen.layout = PatternLayout 
log4perl.appender.screen.layout.ConversionPattern = %d %p> %m%n 

log4perl.appender.file = Log::Log4perl::Appender::File 
log4perl.appender.file.filename = sub { my $script=$0; $script =~ s/(dev|test|prod)\/script/log/; $script =~ s/\.[^.]+$//; return "$script.log" } 
log4perl.appender.file.mode = append 
log4perl.appender.file.layout = PatternLayout 
log4perl.appender.file.layout.ConversionPattern = %d %p> %m%n 

Сценарии использовать этот код для инициализации:

use Log::Log4perl; 
# Logger configuration 
Log::Log4perl->init('/etc/log4perl.conf'); 
$logger = Log::Log4perl->get_logger(); 

Что является лучшим способом для настройки уровня журналирования без необходимости изменить файл конфигурации каждый раз, так как существует несколько сценариев с использованием тот же конфиг.

Могу ли я создать новый регистратор и использовать этот сценарий вместо корневого регистратора?

+0

Вы хотите временно изменить уровень ведения журнала (как в небольшой части одного сценария) без внесения изменений в конфигурацию? Или вам нужен отдельный регистратор для каждого скрипта? – ThisSuitIsBlackNot

+0

Я хотел бы иметь возможность временно изменить уровень ведения журнала для одного скрипта, не затрагивая другие скрипты. Не уверен, что это лучший способ. –

ответ

0

Вы можете использовать метод level, чтобы настроить уровень протоколирования в программе:

use strict; 
use warnings 'all'; 

use Log::Log4perl; 
use Log::Log4perl::Level; 

Log::Log4perl->init(\*DATA); 

my $logger = Log::Log4perl->get_logger; 

$logger->info('before'); 
$logger->level($INFO); 
$logger->info('after'); 

__DATA__ 
log4perl.rootLogger    = WARN, Screen 
log4perl.appender.Screen  = Log::Log4perl::Appender::Screen 
log4perl.appender.Screen.layout = Log::Log4perl::Layout::PatternLayout 
log4perl.appender.Screen.layout.ConversionPattern = %d %p> %m%n 

Выход:

2017/01/25 12:59:58 INFO> after 

Это не повлияет на другие сценарии, которые используют один и тот же конфигурационный файл, так как они каждый будет иметь свой собственный экземпляр журнала :: Log4perl.

В качестве альтернативы, вы можете использовать more_logging/inc_level или less_logging/dec_level методы, которые принимают значение дельта вместо абсолютного уровня протоколирования.

Смежные вопросы