first commit
This commit is contained in:
72
middle/middle_logger.go
Normal file
72
middle/middle_logger.go
Normal file
@@ -0,0 +1,72 @@
|
||||
// Package middle middle_logger.go
|
||||
package middle
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func RequestResponseLogger() gin.HandlerFunc {
|
||||
return func(ctx *gin.Context) {
|
||||
// 保存原始请求体
|
||||
var bodyBytes []byte
|
||||
if ctx.Request.Body != nil {
|
||||
bodyBytes, _ = io.ReadAll(ctx.Request.Body)
|
||||
// 恢复请求体,供后续处理使用
|
||||
ctx.Request.Body = io.NopCloser(bytes.NewBuffer(bodyBytes))
|
||||
}
|
||||
|
||||
// 获取查询参数
|
||||
queryParams := ctx.Request.URL.Query().Encode()
|
||||
|
||||
// 获取请求头信息
|
||||
var headers string
|
||||
Token := ctx.GetHeader("X-Access-Token")
|
||||
|
||||
headers = fmt.Sprintf("X-Access-Token: %s; ", Token)
|
||||
|
||||
// 记录开始时间
|
||||
startTime := time.Now()
|
||||
|
||||
// 继续处理请求
|
||||
ctx.Next()
|
||||
|
||||
// 计算处理时间
|
||||
latency := time.Since(startTime)
|
||||
|
||||
// 格式化日志内容
|
||||
timestamp := time.Now().Format("2006/01/02 15:04:05")
|
||||
|
||||
// 格式化日志内容
|
||||
logMessage := fmt.Sprintf("[GIN] Request | %3d | %13v | %15s | %-7s %s",
|
||||
ctx.Writer.Status(),
|
||||
latency,
|
||||
ctx.ClientIP(),
|
||||
ctx.Request.Method,
|
||||
ctx.Request.URL.Path,
|
||||
)
|
||||
|
||||
// 单独打印查询参数(带时间戳)
|
||||
if queryParams != "" {
|
||||
logMessage += fmt.Sprintf("\n%s [GIN] Params: %s", timestamp, queryParams)
|
||||
}
|
||||
|
||||
// 单独打印请求体(带时间戳)
|
||||
if len(bodyBytes) > 0 {
|
||||
logMessage += fmt.Sprintf("\n%s [GIN] Body: %s", timestamp, string(bodyBytes))
|
||||
}
|
||||
|
||||
// 单独打印请求头(带时间戳)
|
||||
if headers != "" {
|
||||
logMessage += fmt.Sprintf("\n%s [GIN] Headers: %s", timestamp, headers)
|
||||
}
|
||||
|
||||
// 输出到控制台
|
||||
log.Println(logMessage)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user