Monolog:处理程序,用于捕获错误/异常并在响应中输出消息(根据PHP默认值)

时间:2015-09-21 12:27:32

标签: php error-handling monolog

如何在没有Monolog的情况下配置Monolog以在响应中输出PHP错误?

我想要做的是,例如,当PHP页面中出现PHP E_ERROR时,该错误消息将输出到响应,并且还传递给为Monolog设置的任何其他处理程序。

AFAIK,我可能会使用StreamHandler并将其输出到stdout,但不知道如何执行此操作或是否可以按预期工作?

我想选择两种变体:

  1. Monolog在将响应输出到响应
  2. 之前重新格式化错误消息
  3. Monolog将错误(或异常)转发回PHP本机错误处理,以便它在响应中以相同的格式输出消息,就好像Monolog没有调解它一样
  4. 我怎样才能实现这些目标?我甚至不知道如何让Monolog将自己注册为异常和错误的处理程序。我是否需要编写自己的函数来传递给register_error_handler()register_exception_handler()register_shutdown_function()

2 个答案:

答案 0 :(得分:7)

简短版:

use Monolog\ErrorHandler;
$logger = new Logger('Logger Name');

ErrorHandler::register($logger);

更长,更可自定义的版本:

use Monolog\ErrorHandler;

$logger = new Logger('Logger Name');

$handler = new ErrorHandler($logger);
$handler->registerErrorHandler([], false);
$handler->registerExceptionHandler();
$handler->registerFatalHandler();

答案 1 :(得分:1)

我还想保留默认的行为,即响应中的错误消息。仅接收空白页(至少在Monolog 1和PHP 7.2中会发生这种情况)不是很直观,至少在开发过程中是如此。我的解决方案是添加以下处理程序:

$log->pushHandler(new Monolog\Handler\StreamHandler("php://output", Monolog\Logger::ERROR));