category = 'shutdown'; $messages = explode(PHP_EOL, $lastError['message']); $message = array_shift($messages); $this->sendError($message, $lastError['file'], $lastError['line']); } /** * @param \Throwable $exception * * @throws Exception */ public function exceptionHandler(\Throwable $exception) { $this->category = 'exception'; di(EventDispatch::class)->dispatch(new OnAfterRequest()); $this->sendError($exception->getMessage(), $exception->getFile(), $exception->getLine()); } /** * @throws Exception * * 以异常形式抛出错误,防止执行后续程序 */ public function errorHandler() { $error = func_get_args(); $path = ['file' => $error[2], 'line' => $error[3]]; if ($error[0] === 0) { $error[0] = 500; } $data = Json::to(500, $error[1], $path); Kiri::app()->error($data, 'error'); di(EventDispatch::class)->dispatch(new OnAfterRequest()); throw new \ErrorException($error[1], $error[0], 1, $error[2], $error[3]); } /** * @param $message * @param $file * @param $line * @param int $code * @return false|string * @throws Exception */ public function sendError($message, $file, $line, $code = 500): bool|string { $path = ['file' => $file, 'line' => $line]; var_dump(func_get_args()); $data = Json::to($code, $this->category . ': ' . $message, $path); write($data, $this->category); return $data; } /** * @return mixed */ public function getErrorMessage(): mixed { $message = $this->message; $this->message = NULL; return $message->getData(); } /** * @return bool */ public function getAsError(): bool { return $this->message !== NULL; } /** * @param $message * @param string $category * * @throws Exception */ public function writer($message, string $category = 'app') { Kiri::app()->debug($message, $category); } }