public function appException(&$e)
{
$error = [];
$exceptionClass = new \ReflectionClass($e);
$error['exception'] = '\\' . $exceptionClass->name;
$error['message'] = $e->getMessage();
$trace = $e->getTrace();
foreach ($trace as $key => $val) {
$error['files'][$key] = $val;
}
if (substr($e->getFile(), -20) !== '\\Tools\\functions.php' || $e->getLine() !== 90) {
array_unshift($error['files'], ['file' => $e->getFile(), 'line' => $e->getLine(), 'type' => 'throw']);
}
if (!Cml::$debug) {
//正式环境 只显示‘系统错误’并将错误信息记录到日志
Log::emergency($error['message'], [$error['files'][0]]);
$error = [];
$error['message'] = Lang::get('_CML_ERROR_');
}
if (Request::isCli()) {
Output::writeException(sprintf("%s\n[%s]\n%s", isset($error['files']) ? implode($error['files'][0], ':') : '', get_class($e), $error['message']));
} else {
header('HTTP/1.1 500 Internal Server Error');
View::getEngine('html')->reset()->assign('error', $error);
Cml::showSystemTemplate(Config::get('html_exception'));
}
}