2017-01-11 5 views
4

私のPerlスクリプト用のログを生成します。しかし、私がLog::Log4perlを使用している場合、どのような場合でもスクリプトによってスローされるエラーをどのようにキャプチャできますか?それをログファイルに記録する方法。現時点では、ERROR()、DEBUG()などのvariouysタグで明示的に書いているものは、ログファイルに出力される唯一のものです。Log :: Log4perlを使用してすべての予期しないエラーを記録します

Log :: Log4perlを使用してこれを行う方法はありますか。以下のコードの例では

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

Log::Log4perl->easy_init({ level => $DEBUG, 
          file => ">>test.log" }); 

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

$logger->fatal("This is", " fatal"); 
$logger->error("This is error"); 
$logger->warn( "This is warn"); 
$logger->info( "This is info"); 
$logger->debug("This is debug"); 
$logger->trace("This is trace"); 

my $a = 10; 

my $b = $a/0; 

がゼロ除算エラーは、スクリプトに記録されていません。私の元のスクリプトは、各エラーをチェックするには複雑すぎるので、stderrのエラーもログファイルに記録するものが必要です。我々は上記のサブであればブロックを入力しないとき

答えて

3
use Log::Log4perl qw(get_logger); 

$SIG{__DIE__} = sub { 
    if($^S) { 
     # We're in an eval {} and don't want log 
     # this message but catch it later 
     return; 
    } 
    $Log::Log4perl::caller_depth++; 
    my $logger = get_logger(""); 
    $logger->fatal(@_); 
    die @_; # Now terminate really 
}; 

またLog4perl - how can I make sure my application logs a message when it dies unexpectedly?

+0

を参照してください。私が欲しいのは、アプリケーションを停止させるエラーが発生するたびにログを記録し、スクリプトの実行を停止したいときだけです。 – Mohit

+0

@Mohit: '$^S'は' eval'を実行しているときにtrueを返します。 –

関連する問題