1

我的 perl 应用程序目前有基本的日志记录。我正在使用 Mod_perl 和 CGI

当脚本中发生错误时,用户将获得内部服务器错误页面。我知道 CPAN CGI 有一个错误报告功能,但这个功能似乎是针对单个脚本的。我想要的是全局捕获堆栈跟踪,然后在网页上将其报告给用户。这样当这种情况发生时,用户会得到一个不错的“出现问题”页面,而不是毫无头绪的内部服务器错误页面。

4

1 回答 1

0

我通过创建 bootstrap.pl 脚本很好地处理了这个问题。我使用 mod_rewrite 将所有脚本重定向到 bootstrap.pl 并将实际 url 作为参数发布。在引导程序中,我正在处理会话、日志记录等,最后我正在调用 eval('script from url')。对您来说最有趣的是错误处理:

use ex::override GLOBAL_die => sub {
    my $stackTrace = Devel::StackTrace->new(no_refs => 1)->as_string;
    if ($stackTrace =~ /eval \{/) {
            CORE::die @_;
    } else {
            local *__ANON__ = "Exception";
            select STDOUT;
            print getError500( sprintf(
                                    join("\n",<DATA>),
                                    @_,
                                    $stackTrace,
                                    Dumper(\%ENV)
            ));
            CORE::exit 1;
    }

};

这是覆盖模具并在异常时打印带有完整堆栈的漂亮错误 500 页。我尝试了很多东西,这对我来说似乎是最好的方法。

于 2013-08-08T10:56:42.470 回答