一部の cgi スクリプトを mod_perl に変換しています。cgi では、sig DIE を使用して、キャプチャされていない例外が発生するたびにスタック トレースをキャプチャし、それらをログに記録しました。これはうまく機能しました。スクリプトで何かが停止するたびに、アプリケーション ログに適切なスタック トレースが記録されます。コードは次のとおりです。
BEGIN {
$SIG{__DIE__} = \&sigDie;
}
sub sigDie {
return 1 if $^S; # we are in an eval block
my ($error) = @_;
cluck("Caught fatal error: $error"); # put a stack trace in the logs via warn
local $Log::Log4perl::caller_depth = $Log::Log4perl::caller_depth + 1;
FATAL @_; # call log4perl's fatal
return 1;
}
ただし、Apache2::Registry の下では、私のコードは呼び出されなくなりました。コードが終了すると、ログ記録が停止するだけです。これは、コードが mod_perl によって評価されているためだと思いましたが、上記のルーチンから評価チェックを外しましたが、まだ呼び出されていません。
mod_perl で必要なものを取得する方法はありますか? これらのスタック トレースの自動ログ記録が非常に便利であることがわかりました。これまでのところ、私はそれを取得する方法について空っぽになりました。