From 1448b2b4a405554e977725aac30bb3136f2be4f6 Mon Sep 17 00:00:00 2001 From: Nick Zeng Date: Tue, 17 Mar 2026 12:45:22 +0800 Subject: [PATCH] update request log middleware --- backend/app/Middleware/RequestLogMiddleware.php | 11 ++++++++--- backend/config/autoload/middlewares.php | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/backend/app/Middleware/RequestLogMiddleware.php b/backend/app/Middleware/RequestLogMiddleware.php index 382a1f2..cc6c039 100644 --- a/backend/app/Middleware/RequestLogMiddleware.php +++ b/backend/app/Middleware/RequestLogMiddleware.php @@ -53,8 +53,8 @@ class RequestLogMiddleware implements MiddlewareInterface $response_code = self::extractResponseCode($response); - // 异步协程写库,不阻塞响应返回 - Coroutine::create(static function () use ( + // defer 写库:在当前协程退出时执行,响应已返回客户端,同时保证协程内 DB 连接可用 + Coroutine::defer(static function () use ( $user_id, $method, $path, $status_code, $ip, $user_agent, $request_body, $response_code, $duration_ms ): void { @@ -110,7 +110,12 @@ class RequestLogMiddleware implements MiddlewareInterface } try { - $body = (string) $response->getBody(); + $stream = $response->getBody(); + $body = (string) $stream; + // 回退流指针,避免后续读取得到空内容 + if ($stream->isSeekable()) { + $stream->rewind(); + } $data = json_decode($body, true); if (is_array($data) && isset($data['code'])) { return (int) $data['code']; diff --git a/backend/config/autoload/middlewares.php b/backend/config/autoload/middlewares.php index 49bdec2..9ae93d1 100644 --- a/backend/config/autoload/middlewares.php +++ b/backend/config/autoload/middlewares.php @@ -11,5 +11,6 @@ declare(strict_types=1); */ return [ 'http' => [ + \App\Middleware\RequestLogMiddleware::class, ], ];