attributes->set('start_time', microtime(true)); return $next($request); } /** * @param Request $request * @param Response|JsonResponse|HttpResponse $response */ public function terminate(Request $request, Response|JsonResponse|HttpResponse $response): void { //结束时间 $end = microtime(true); $diff = $end - $request->attributes->get('start_time'); $ip = json_encode($request->ips(),256); if ($response instanceof JsonResponse) { $response_str = $this->getJsonResponseStr($response); } else { $response_str = $this->getResponseStr($response); } // 回调消息获取request_data if (stripos($request->url, 'notify') !== false) { $request_data = file_get_contents('php://input') ?: file_get_contents('php://temp'); } else { $request_data = request()->all(); } recordLog('RecordApiUse', implode("\n", [ '请求地址: '. $ip. '|'. $request->method(). '|'. $request->url(), '请求入参: '. json_encode($request_data, JSON_UNESCAPED_UNICODE), '请求出参: '. $response_str, '耗时: '. sprintf("%.6f", $diff). 's' ])); } /** * 获取响应字符串 * @param Response|HttpResponse $response * @return string */ protected function getResponseStr(Response|HttpResponse $response): string { return PHP_EOL. sprintf('HTTP/%s %s %s', $response->getProtocolVersion(), $response->getStatusCode(), Response::$statusTexts[$response->getStatusCode()]). PHP_EOL. $response->headers. PHP_EOL. json_encode($response->getContent(), JSON_UNESCAPED_UNICODE); } /** * 获取json相应字符串 * @param JsonResponse $response * @return string */ protected function getJsonResponseStr(JsonResponse $response): string { return PHP_EOL. sprintf('HTTP/%s %s %s', $response->getProtocolVersion(), $response->getStatusCode(), Response::$statusTexts[$response->getStatusCode()]). PHP_EOL. $response->headers. PHP_EOL. json_encode($response->getData(), JSON_UNESCAPED_UNICODE); } }