如何在使用 Monolog 的 ExceptionHandler 时显示异常?

How can I display an exception when I use Monolog's ExceptionHandler?

在我的用例中,我想显示(在开发时)在我的 php- 应用程序中抛出的异常。

error_reporting(E_ALL);
ini_set('display_errors', '1');

...

throw new Exception();

这可以正常工作。当我抛出异常时,我将在我的 http-response 中从 apache 接收到它(在返回的 HTML 内)。

现在,我想使用 Monolog 进行日志记录。我集成了它,一切正常,例如,Monolog 将异常记录到文件中。

error_reporting(E_ALL);
ini_set('display_errors', '1');

...

$exception_log = new Logger('exception');
\Monolog\ErrorHandler::register($exception_log, false, null, false);

...

throw new Exception();

但是,异常不再发送到 http 响应的 html 部分。因此,当我执行 http 请求时,它不会显示在我的浏览器中。

如何使用 Monolog 记录我的异常,并且仍然 "display" 它们?

您需要添加自己的异常处理程序。

例如:

function echo_exception_handler($e) {
  echo sprintf('Uncaught Exception %s: "%s" at %s line %s', get_class($e), $e->getMessage(), $e->getFile(), $e->getLine());
}
set_exception_handler('echo_exception_handler');

$exception_log = new Logger('exception');
...