如何在没有Monolog的情况下配置Monolog以在响应中输出PHP错误?
我想要做的是,例如,当PHP页面中出现PHP E_ERROR时,该错误消息将输出到响应,并且还传递给为Monolog设置的任何其他处理程序。
AFAIK,我可能会使用StreamHandler并将其输出到stdout,但不知道如何执行此操作或是否可以按预期工作?
我想选择两种变体:
我怎样才能实现这些目标?我甚至不知道如何让Monolog将自己注册为异常和错误的处理程序。我是否需要编写自己的函数来传递给register_error_handler()
,register_exception_handler()
和register_shutdown_function()
?
答案 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));