2017-01-25 19 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 

這不會影響使用相同的配置文件的其他腳本,因爲它們將分別擁有自己的Log :: Log4perl實例。

或者,也可以使用more_logging/inc_levelless_logging/dec_level方法,它們取一個增量值,而不是一個絕對日誌級別。