From 97ab623d429e6e620f8f6af5a51a7b7e0a2cec53 Mon Sep 17 00:00:00 2001 From: hkfires <10558748+hkfires@users.noreply.github.com> Date: Mon, 15 Dec 2025 18:00:32 +0800 Subject: [PATCH] fix(api): prevent double logging for streaming responses --- internal/api/middleware/response_writer.go | 29 +++++++++------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/internal/api/middleware/response_writer.go b/internal/api/middleware/response_writer.go index e70556d0..8005df23 100644 --- a/internal/api/middleware/response_writer.go +++ b/internal/api/middleware/response_writer.go @@ -267,7 +267,7 @@ func (w *ResponseWriterWrapper) Finalize(c *gin.Context) error { return nil } - if w.isStreaming { + if w.isStreaming && w.streamWriter != nil { if w.chunkChannel != nil { close(w.chunkChannel) w.chunkChannel = nil @@ -279,24 +279,19 @@ func (w *ResponseWriterWrapper) Finalize(c *gin.Context) error { } // Write API Request and Response to the streaming log before closing - if w.streamWriter != nil { - apiRequest := w.extractAPIRequest(c) - if len(apiRequest) > 0 { - _ = w.streamWriter.WriteAPIRequest(apiRequest) - } - apiResponse := w.extractAPIResponse(c) - if len(apiResponse) > 0 { - _ = w.streamWriter.WriteAPIResponse(apiResponse) - } - if err := w.streamWriter.Close(); err != nil { - w.streamWriter = nil - return err - } + apiRequest := w.extractAPIRequest(c) + if len(apiRequest) > 0 { + _ = w.streamWriter.WriteAPIRequest(apiRequest) + } + apiResponse := w.extractAPIResponse(c) + if len(apiResponse) > 0 { + _ = w.streamWriter.WriteAPIResponse(apiResponse) + } + if err := w.streamWriter.Close(); err != nil { w.streamWriter = nil + return err } - if forceLog { - return w.logRequest(finalStatusCode, w.cloneHeaders(), w.body.Bytes(), w.extractAPIRequest(c), w.extractAPIResponse(c), slicesAPIResponseError, forceLog) - } + w.streamWriter = nil return nil }