You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
3.3 KiB
78 lines
3.3 KiB
<?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"; |
|
if ($exception instanceof \yii\db\Exception && !empty($exception->errorInfo)) { |
|
$message .= "\n" . $this->formatMessage("Error Info:\n", [Console::BOLD]) . print_r($exception->errorInfo, true); |
|
} |
|
$message .= "\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; |
|
} |
|
} |