PHP 7 个未捕获的异常未被记录

PHP 7 uncaught exceptions aren't logged

我将一些 Web 应用程序从 PHP 5.6 迁移到 PHP 7.0,但我注意到未处理的异常不会记录在配置的日志中(或至少在 apache 日志中 error.log).错误消息不会显示在网站上,它只是在错误出现后停止。

我用那个简单的代码试过了:


<?php
namespace Application\MyApp;
    
ini_set('error_log', '/my/log/location/my_error.log');
error_reporting(E_ALL);
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
    
$host = gethostname();
echo "<b>start test on $host</b><br>";
    
throw new \Error('Test exception outside of try/catch.');
    
echo "<b>test finished on $host<b><br>";

使用 PHP 5.6 我使用相同的代码在配置的日志中得到预期的错误消息:

PHP Fatal error:  Uncaught exception 'Error' with message 'Test exception outside of try/catch.

是否可以将所有未捕获的异常重定向到配置的日志文件中,如 PHP 5.6 中那样?

如果我添加异常处理程序方法,我会得到所需的日志信息:

function myExceptionHandler (\Throwable $ex)
{
    echo $ex->getMessage();
    throw $ex;
}
set_exception_handler('Application\MyApp\myExceptionHandler');