Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Monolog: Handler to catch errors/exceptions and output the messages in the response (as per PHP default)

How can I configure Monolog to output PHP errors within the response, as would have been done without Monolog?

What I want to do is when, for example, a PHP E_ERROR occurs within a PHP page, that error message will be output to the response, and also passed to any other Handlers set for Monolog.

AFAIK, I might use StreamHandler and have it output to stdout, but don't know how to do this or if it will work as expected?

There are two variations I'd like the option of:

  1. Monolog re-formats the error message before having it output within the response
  2. Monolog relays the error (or exception) back to PHP native error handling so that it outputs the message in the same format in the response as if Monolog was not mediating it

How could I achieve these? I don't even know how I can get Monolog to register itself as a handler for exceptions and errors. Would I need to write my own functions to pass to register_error_handler(), register_exception_handler() and register_shutdown_function()?

like image 688
CL22 Avatar asked Sep 21 '15 12:09

CL22


People also ask

What is monolog PHP?

Monolog is the existing standard logging library for PHP. It is most popular in PHP frameworks such as Laravel and Symfony, where it implements a common interface for logging libraries.

What is Monolog symfony?

Monolog. Symfony integrates seamlessly with Monolog, the most popular PHP logging library, to create and store log messages in a variety of different places and trigger various actions.


2 Answers

Short version:

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

ErrorHandler::register($logger);

Longer, more customizable version:

use Monolog\ErrorHandler;

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

$handler = new ErrorHandler($logger);
$handler->registerErrorHandler([], false);
$handler->registerExceptionHandler();
$handler->registerFatalHandler();
like image 55
Loupax Avatar answered Oct 04 '22 08:10

Loupax


I also wanted to preserve the default behaviour, i.e., error messages in the response. Just receiving blank pages (which happens at least with Monolog 1 and PHP 7.2) is not very intuitive, at least during development. My solution was to add the following handler:

$log->pushHandler(new Monolog\Handler\StreamHandler("php://output", Monolog\Logger::ERROR));
like image 37
Ralf Jahr Avatar answered Sep 30 '22 08:09

Ralf Jahr