Carsten Brandt
11 years ago
5 changed files with 82 additions and 54 deletions
@ -0,0 +1,75 @@
|
||||
<?php |
||||
/** |
||||
* @link http://www.yiiframework.com/ |
||||
* @copyright Copyright (c) 2008 Yii Software LLC |
||||
* @license http://www.yiiframework.com/license/ |
||||
*/ |
||||
|
||||
namespace yii\console; |
||||
|
||||
use Yii; |
||||
use yii\base\ErrorException; |
||||
use yii\base\UserException; |
||||
use yii\helpers\Console; |
||||
|
||||
/** |
||||
* ErrorHandler handles uncaught PHP errors and exceptions. |
||||
* |
||||
* ErrorHandler is configured as an application component in [[\yii\base\Application]] by default. |
||||
* You can access that instance via `Yii::$app->errorHandler`. |
||||
* |
||||
* @author Carsten Brandt <mail@cebe.cc> |
||||
* @since 2.0 |
||||
*/ |
||||
class ErrorHandler extends \yii\base\ErrorHandler |
||||
{ |
||||
/** |
||||
* Renders an exception using ansi format for console output. |
||||
* @param \Exception $exception the exception to be rendered. |
||||
*/ |
||||
protected function renderException($exception) |
||||
{ |
||||
if ($exception instanceof Exception && ($exception instanceof UserException || !YII_DEBUG)) { |
||||
$message = $this->formatMessage($exception->getName() . ': ') . $exception->getMessage(); |
||||
} elseif (YII_DEBUG) { |
||||
if ($exception instanceof Exception) { |
||||
$message = $this->formatMessage("Exception ({$exception->getName()})"); |
||||
} elseif ($exception instanceof ErrorException) { |
||||
$message = $this->formatMessage($exception->getName()); |
||||
} else { |
||||
$message = $this->formatMessage('Exception'); |
||||
} |
||||
$message .= $this->formatMessage(" '" . get_class($exception) . "'", [Console::BOLD, Console::FG_BLUE]) |
||||
. " with message " . $this->formatMessage("'{$exception->getMessage()}'", [Console::BOLD]) //. "\n" |
||||
. "\n\nin " . dirname($exception->getFile()) . DIRECTORY_SEPARATOR . $this->formatMessage(basename($exception->getFile()), [Console::BOLD]) |
||||
. ':' . $this->formatMessage($exception->getLine(), [Console::BOLD, Console::FG_YELLOW]) . "\n\n" |
||||
. $this->formatMessage("Stack trace:\n", [Console::BOLD]) . $exception->getTraceAsString(); |
||||
} else { |
||||
$message = $this->formatMessage('Error: ') . $exception->getMessage(); |
||||
} |
||||
|
||||
if (PHP_SAPI === 'cli') { |
||||
Console::stderr($message . "\n"); |
||||
} else { |
||||
echo $message . "\n"; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Colorizes a message for console output. |
||||
* @param string $message the message to colorize. |
||||
* @param array $format the message format. |
||||
* @return string the colorized message. |
||||
* @see Console::ansiFormat() for details on how to specify the message format. |
||||
*/ |
||||
protected function formatMessage($message, $format = [Console::FG_RED, Console::BOLD]) |
||||
{ |
||||
$stream = (PHP_SAPI === 'cli') ? STDERR : STDOUT; |
||||
// try controller first to allow check for --color switch |
||||
if (Yii::$app->controller instanceof \yii\console\Controller && Yii::$app->controller->isColorEnabled($stream) |
||||
|| Yii::$app instanceof \yii\console\Application && Console::streamSupportsAnsiColors($stream)) { |
||||
$message = Console::ansiFormat($message, $format); |
||||
} |
||||
return $message; |
||||
} |
||||
} |
Loading…
Reference in new issue