4

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

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 のエラーをログ ファイルにも記録するものが必要です。

4

1 に答える 1

5
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も参照してください - アプリケーションが予期せず停止したときにメッセージをログに記録する方法を教えてください。

于 2017-01-11T10:08:27.233 に答える