Permalink
Browse files

Add support for custom console error handling

Both errors and exceptions can be configured for the console
at the application layer now.

Fixes #2696
  • Loading branch information...
1 parent 69e63b1 commit 34e1afd8efa3a02ba637ef53a952a0fc1b56f60c @markstory markstory committed Mar 21, 2012
Showing with 26 additions and 4 deletions.
  1. +26 −4 lib/Cake/Console/ShellDispatcher.php
@@ -134,10 +134,8 @@ protected function _bootstrap() {
include_once CAKE_CORE_INCLUDE_PATH . DS . 'Cake' . DS . 'Console' . DS . 'Templates' . DS . 'skel' . DS . 'Config' . DS . 'core.php';
App::build();
}
- require_once CAKE . 'Console' . DS . 'ConsoleErrorHandler.php';
- $ErrorHandler = new ConsoleErrorHandler();
- set_exception_handler(array($ErrorHandler, 'handleException'));
- set_error_handler(array($ErrorHandler, 'handleError'), Configure::read('Error.level'));
+
+ $this->setErrorHandlers();
if (!defined('FULL_BASE_URL')) {
define('FULL_BASE_URL', 'http://localhost');
@@ -147,6 +145,30 @@ protected function _bootstrap() {
}
/**
+ * Set the error/exception handlers for the console
+ * based on the `Error.consoleHandler`, and `Exception.consoleHandler` values
+ * if they are set. If they are not set, the default ConsoleErrorHandler will be
+ * used.
+ *
+ * @return void
+ */
+ public function setErrorHandlers() {
+ App::uses('ConsoleErrorHandler', 'Console');
+ $error = Configure::read('Error');
+ $exception = Configure::read('Exception');
+
+ $errorHandler = new ConsoleErrorHandler();
+ if (empty($error['consoleHandler'])) {
+ $error['consoleHandler'] = array($errorHandler, 'handleError');
+ }
+ if (empty($exception['consoleHandler'])) {
+ $exception['consoleHandler'] = array($errorHandler, 'handleException');
+ }
+ set_exception_handler($exception['consoleHandler']);
+ set_error_handler($error['consoleHandler'], Configure::read('Error.level'));
+ }
+
+/**
* Dispatches a CLI request
*
* @return boolean

0 comments on commit 34e1afd

Please sign in to comment.