2
\$\begingroup\$

I've written a custom Error handler for use in PHP. What it does is simply capture PHP errors, and logs them using Monolog.

It works, but I can't help that it has too much stuff inside. I could remove the error levels that are not handled by set_error_handler but that's guaranteed to lead to a developer that spends 2 hours wondering "why E_ERRORs are not getting logged"...

Could this function be improved somehow?

set_error_handler(function($errno ,$errstr,$errfile ,$errline, $errcontext) {
 // When we use the error supressing operator (@) 
 // error_reporting is temporarily set to 0
 // Do not log anything for that case
 if(ini_get('error_reporting')==0){return;}
 $halt = FALSE;
 // http://php.net/manual/en/errorfunc.constants.php
 switch($errno){
 case E_USER_ERROR:
 case E_RECOVERABLE_ERROR:
 $halt = true;
 $logType = 'error';
 break;
 case E_WARNING:
 case E_USER_WARNING:
 case E_STRICT:
 case E_DEPRECATED:
 $logType = 'warning';
 break;
 case E_NOTICE:
 case E_USER_NOTICE:
 $logType = 'notice';
 break;
 // The following error types cannot be caught by set_error_handler
 // Adding them for reference only
 case E_CORE_WARNING:
 case E_COMPILE_ERROR:
 case E_COMPILE_WARNING:
 case E_CORE_ERROR:
 case E_ERROR:
 case E_PARSE:
 return FALSE;
 // We should never reach this case. But you never know
 case E_ALL:
 default:
 $logType = 'warning';
 }
 Logger::{$logType}($errstr, $errcontext);
 // Halt the execution for errors that should halt
 if($halt)
 exit($errno);
});
200_success
145k22 gold badges190 silver badges478 bronze badges
asked May 18, 2015 at 14:38
\$\endgroup\$

1 Answer 1

1
\$\begingroup\$

Look here it is already tested on live projects error catcher.

Fatal errors can be catch only by 'register_shutdown_function'

You do not track uncatched Exceptions, it can be done by 'set_exception_handler'

If code runout all memory it will not able to log error, but if you does not catch Fatal errors so it is not your case.

answered May 22, 2015 at 13:23
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.