chore: opt template code

This commit is contained in:
engigu
2025-12-06 21:11:15 +08:00
parent bed2b2b08c
commit a2acd49884
11 changed files with 54 additions and 10 deletions
+44
View File
@@ -1,8 +1,10 @@
package middleware
import (
"bytes"
"fmt"
"math"
"strings"
"net/http"
"net/url"
@@ -12,6 +14,23 @@ import (
"github.com/sirupsen/logrus"
)
// 需要记录响应内容的 API 路径前缀
var logResponsePaths = []string{
"/api/v1/message/send",
"/api/v2/message/send",
}
// responseBodyWriter 用于捕获响应内容
type responseBodyWriter struct {
gin.ResponseWriter
body *bytes.Buffer
}
func (w responseBodyWriter) Write(b []byte) (int, error) {
w.body.Write(b)
return w.ResponseWriter.Write(b)
}
// LogMiddleware Logger is the logrus logger handler
func LogMiddleware(notLogged ...string) gin.HandlerFunc {
//hostname, err := os.Hostname()
@@ -33,6 +52,24 @@ func LogMiddleware(notLogged ...string) gin.HandlerFunc {
raw := c.Request.URL.RawQuery
start := time.Now()
// 判断是否需要捕获响应内容
needCaptureResponse := false
for _, logPath := range logResponsePaths {
if strings.HasPrefix(path, logPath) {
needCaptureResponse = true
break
}
}
var bodyWriter *responseBodyWriter
if needCaptureResponse {
bodyWriter = &responseBodyWriter{
ResponseWriter: c.Writer,
body: bytes.NewBufferString(""),
}
c.Writer = bodyWriter
}
c.Next()
stop := time.Since(start)
@@ -70,6 +107,13 @@ func LogMiddleware(notLogged ...string) gin.HandlerFunc {
entry.Error(c.Errors.ByType(gin.ErrorTypePrivate).String())
} else {
msg := fmt.Sprintf("%s [%s] %s %d %d (%dms)", clientIP, c.Request.Method, path, statusCode, dataLength, latency)
// 如果是发送消息的 API,打印返回内容
if needCaptureResponse && bodyWriter != nil {
responseBody := bodyWriter.body.String()
msg = fmt.Sprintf("%s | Response: %s", msg, responseBody)
}
if statusCode >= http.StatusInternalServerError {
entry.Error(msg)
} else if statusCode >= http.StatusBadRequest {