Php Symfony2:自定义错误处理程序->;句柄()

Php Symfony2:自定义错误处理程序->;句柄(),php,symfony,error-handling,Php,Symfony,Error Handling,跟进未回答的问题和问题 我已经实现了一个定制的异常监听器,它可以很好地处理403和404错误,但不能捕获500个错误。我得到的一些反馈表明,在Symfony有机会运行之前,大约有500个错误发生,因此无法被任何听众捕获 我注意到,无论我生成什么类型的奇怪错误,无论是语法错误、未定义变量、未知方法、对非对象的方法调用等等,似乎在开发环境中总是调用ErrorHandler->handle()或ErrorHandler->handleFatalError()(参见下面的一些示例)(但在开发环境中情况并

跟进未回答的问题和问题

我已经实现了一个定制的异常监听器,它可以很好地处理403和404错误,但不能捕获500个错误。我得到的一些反馈表明,在Symfony有机会运行之前,大约有500个错误发生,因此无法被任何听众捕获

我注意到,无论我生成什么类型的奇怪错误,无论是语法错误、未定义变量、未知方法、对非对象的方法调用等等,似乎在开发环境中总是调用ErrorHandler->handle()或ErrorHandler->handleFatalError()(参见下面的一些示例)(但在开发环境中情况并非如此,我经常在Symfony中发现一个正常的PHP错误)

我想做的是,每当在生产环境中发生这样的错误时,我总是显示一个用户友好的(Oops,出错)错误页面,并总是发送一封包含错误细节的电子邮件。对我来说,如果我可以自定义ErrorHandler->handle(),那么我就能够做到这一点。原因很简单,我想知道我的生产系统中出现的任何错误。人们会认为这是一个相对常见的功能,但我无法做到

我仍在学习Symfony,尽管我已经实现了自定义控制台命令、自定义身份验证处理程序以及更多复杂的安全功能,但我真的很难做到这一点。如果有人拥有丰富的Symfony经验,能告诉我这是否可行,如果可行,我将如何做,我将不胜感激g它


事实上,我也遇到了同样的问题,并想出了一个解决方案。我不确定这是否是最好的解决方案,但目前它对我有效

我在app.php中添加了以下行(在app.php的“use”-Statment之后):


这样,用户将被重定向到支持表单,错误将记录在error.log中。如果有人有更好的解决方案,我很乐意阅读。

您需要在生产环境中启用调试。请在app.php中使用Debug::enable()。请参阅。 为了通过电子邮件向您发送错误,可以使用monolog。您需要为“emergency”频道注册日志记录器,并使用适当的配置发送邮件。这是用于通过错误处理程序进行日志记录的频道

register_shutdown_function(function()
{
    $error = error_get_last();
    if ($error != null)
    {
        $pageURL = 'http';
        if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
        $pageURL .= "://";
        if ($_SERVER["SERVER_PORT"] != "80") {
            $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"];
        } else {
            $pageURL .= $_SERVER["SERVER_NAME"]; 
        }
        header("Location: ".$pageURL."/senderrorrequest?message=".$error['message']);
    }
});