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了
我有一个 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了