Perrin Harkins wrote:

I'm not sure if that's accurate or not, but setting a $SIG{__DIE__}
handler should work fine.

You don't even need to use a __DIE__ handler. mod_perl will place any runtime errors into $r->notes('error-notes'). I don't like my errors going to the browser (only really works if your content is HTML anyway) but for the email I usually use an Apache cleanup handler. That way it gets sent after the client request has returned, so they don't have to wait on it.

I use something like this:

# in httpd.conf where you need it
PerlCleanupHandler MyProject::ApacheCleanup

# in MyProject/ApacheCleanup.pm
package MyProject::ApacheCleanup;
use Apache::Constants qw(:common);
sub handler ($$) {
    my ($class, $r) = @_;
    return DECLINED unless $r->is_main;

    my $status = $r->last->status;
    return DECLINED unless $status == SERVER_ERROR;
    my $error = $r->notes('error-notes') || $ENV{ERROR_NOTES};
    return DECLINED unless $error;

    # create your email message and send it. I also like to put in a
    # Data::Dumper dump of %ENV, the URL, timestamp and other project
    # specific config settings

    return DECLINED;
}


--
Michael Peters
Plus Three, LP

Reply via email to