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

設定を変更せずに一時的にログレベルを変更したいとしますか(1つのスクリプトの小さな部分など)あるいは、スクリプトごとに別々のロガーが必要ですか? – ThisSuitIsBlackNot

+0

他のスクリプトに影響を与えずに、1つのスクリプトのログレベルを一時的に変更したいと思っています。それを達成するための最良の方法は不明です。 –

答えて

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_levelまたはless_logging/dec_level方法を、使用することができます。

関連する問題