status = $e->status; $this->message = $e->message; $this->data = $e->data; return $this->renderJson(); } $this->status = config('status.error'); $this->message = $e->getMessage() ?: '很抱歉,服务器内部错误'; // 如果是debug模式, 输出调试信息 if (is_debug()) { return $this->renderDebug($e); } // 将异常写入日志 $this->recordErrorLog($e); return $this->renderJson(); } /** * 返回json格式数据 * @param array $extend 扩展的数据 * @return \think\response\Json */ private function renderJson($extend = []) { $jsonData = ['message' => $this->message, 'status' => $this->status, 'data' => $this->data]; return json(array_merge($jsonData, $extend)); // $jsonData = ['message' => $this->message, 'status' => $this->status, 'data' => $this->data]; // header('Content-Type:application/json; charset=utf-8'); // http_response_code($this->status); // exit(json_encode(array_merge($jsonData, $extend), JSON_UNESCAPED_UNICODE)); } /** * 返回json格式数据 (debug模式) * @param Throwable $e * @return \think\response\Json */ private function renderDebug(Throwable $e) { $debug = [ 'name' => get_class($e), 'file' => $e->getFile(), 'line' => $e->getLine(), 'code' => $this->getCode($e), 'message' => $this->getMessage($e), 'trace' => $e->getTrace(), 'source' => $this->getSourceCode($e), ]; return $this->renderJson(['debug' => $debug]); } /** * 将异常写入日志 * @param Throwable $e */ private function recordErrorLog(Throwable $e) { // 生成日志内容 $data = [ 'file' => $e->getFile(), 'line' => $e->getLine(), 'message' => $this->getMessage($e), 'status' => $this->getCode($e), ]; $log = "[{$data['status']}]{$data['message']} [{$data['file']}:{$data['line']}]"; $log .= "\r\n" . $e->getTraceAsString(); // 写入日志文件 Log::record($log, 'error'); } }