Commit beb44eb4 authored by Taylor Otwell's avatar Taylor Otwell

Merge pull request #157 from sparksp/develop/exception

Refactor error handling to log ignored errors
parents d3f93919 1d5fbab5
......@@ -15,22 +15,29 @@ require 'bootstrap/core.php';
date_default_timezone_set(Config::$items['application']['timezone']);
/**
* Create the exception handler function. All of the error handlers
* registered by the framework call this closure to avoid duplicate
* code. This Closure will determine if the logging Closure should
* be called, and will pass the exception to the developer defined
* handler in the configuration file.
* Create the exception logging function. All of the error logging
* is routed through here to avoid duplicate code. This Closure
* will determine if the actual logging Closure should be called.
*/
$handler = function($exception)
$logger = function($exception)
{
$config = Config::$items['error'];
if ($config['log'])
if (Config::$items['error']['log'])
{
call_user_func($config['logger'], $exception);
call_user_func(Config::$items['error']['logger'], $exception);
}
};
/**
* Create the exception handler function. All of the error handlers
* registered by the framework call this closure to avoid duplicate
* code. This Closure will pass the exception to the developer
* defined handler in the configuration file.
*/
$handler = function($exception) use ($logger)
{
$logger($exception);
if ($config['detail'])
if (Config::$items['error']['detail'])
{
echo "<html><h2>Unhandled Exception</h2>
<h3>Message:</h3>
......@@ -55,22 +62,29 @@ $handler = function($exception)
*/
set_exception_handler(function($exception) use ($handler)
{
$handler($exception);
$handler($exception);
});
/**
* Register the PHP error handler. All PHP errors will fall into this
* handler, which will convert the error into an ErrorException object
* and pass the exception into the common exception handler.
* and pass the exception into the common exception handler. Suppressed
* errors are ignored and errors in the developer configured whitelist
* are silently logged.
*/
set_error_handler(function($number, $error, $file, $line)
set_error_handler(function($number, $error, $file, $line) use ($logger)
{
if (error_reporting() === 0 or in_array($number, Config::$items['error']['ignore']))
if (error_reporting() === 0)
{
return;
}
throw new \ErrorException($error, $number, 0, $file, $line);
$exception = new \ErrorException($error, $number, 0, $file, $line);
if (in_array($number, Config::$items['error']['ignore']))
{
$logger($exception);
return;
}
throw $exception;
});
/**
......@@ -221,4 +235,4 @@ if (Config::$items['session']['driver'] !== '')
IoC::core('session')->save($driver);
}
$response->send();
\ No newline at end of file
$response->send();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment