Symfony 在 CLI 命令中捕获 PHP 错误

Symfony catch PHP errors in CLI command

我有一个 Symfony 3.2 应用程序。我创建了一个命令 运行 一些后台任务。我必须知道命令何时完成,即使它导致异常或致命错误。

我的第一个想法是用 try/catch 块包围我的代码。我能够捕获在我的代码或 PHP 库中生成的异常作为 PDO 但不是核心致命错误。然后我尝试接收错误,所以我将一个处理程序推送到应用程序记录器。我再次拦截异常但不拦截致命错误。以下是我将处理程序添加到记录器的方法:

$logger = $this->getContainer()->get('logger');
$handler = $this->getContainer()->get('app.bg_command_log_handler');
$logger->pushHandler(self::$handler);

这是处理程序:

use Monolog\Handler\AbstractProcessingHandler;

class BgCommandLogHandler extends AbstractProcessingHandler
{
    protected function write(array $record)
    {
        var_dump($record);
    }
}

Symfony 版本是 3.2,PHP 是 5.6。

您可以使用 set_error_handler() 设置自定义错误处理程序,如 here 所述。

在出现错误时使用错误处理程序 throw() 异常。这样,任何可能引发致命错误的事情都会引发您选择的异常,并且您能够捕获它。

当然,这会影响您的整个应用程序,而不仅仅是这个特定的命令。但我认为这是一件好事。

顺便说一句,如果可能的话,您真的应该尝试升级您的 PHP 运行时。很久没有支持5.6了