2

log4Perl で、eval 句の外でもプログラムに致命的なログを強制する方法はありますか? 未処理のプログラムが終了した場合にも log4perl を呼び出すようにしたいと考えています。できれば、関連するエラー ハンドラを、すべての Perl プログラムとともにロードされる標準モジュール内に追加したいと考えています。
Perl のバージョンは現在 5.8 ですが、近日中にアップグレードします。
これは、指定された回答のテスト コードです。画面に DIE も、die.txt も作成されていません。

 use Log::Log4perl qw(get_logger);
$a->test();
$SIG{__DIE__} = sub {
 warn "DIE";
 open DIE,">die.txt";
 print DIE "died\n";
 close DIE;
};
4

1 に答える 1

4

FAQ のように見え ます。

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;
    }
    local $Log::Log4perl::caller_depth =
          $Log::Log4perl::caller_depth + 1;
    my $logger = get_logger("");
    $logger->fatal(@_);
    die @_; # Now terminate really
};

詳細についてはperlipcを参照してください

于 2012-10-11T10:22:47.080 に答える