提交 a20af0ae 编写于 作者: G Granty1

Refine the logic of log middleware, add response body.

上级 62678966
package middleware
import (
"gin-vue-admin/init/qmlog"
"github.com/gin-gonic/gin"
"bytes"
"net/http/httputil"
"time"
"github.com/gin-gonic/gin"
"qiniupkg.com/x/log.v7"
)
func Logger() gin.HandlerFunc {
return func(c *gin.Context) {
// 开始时间
// request time
start := time.Now()
// 处理请求
c.Next()
// 结束时间
end := time.Now()
//执行时间
latency := end.Sub(start)
// request path
path := c.Request.URL.Path
// request ip
clientIP := c.ClientIP()
// method
method := c.Request.Method
// copy request content
req, _ := httputil.DumpRequest(c.Request, true)
log.Infof(`| %s | %s | %s | %5s | %s\n`,
`Request :`, method, clientIP, path, string(req))
// replace writer
cusWriter := &responseBodyWriter{
ResponseWriter: c.Writer,
body: bytes.NewBufferString(""),
}
c.Writer = cusWriter
// handle request
c.Next()
// ending time
end := time.Now()
//execute time
latency := end.Sub(start)
statusCode := c.Writer.Status()
buf := make([]byte, 1024)
n, _ := c.Request.Body.Read(buf)
requestParams := buf[0:n]
qmlog.QMLog.Infof("| %3d | %13v | %15s | %s %s |%s|",
log.Infof(`| %s | %3d | %13v | %s \n`,
`Response:`,
statusCode,
latency,
clientIP,
method, path, requestParams,
)
cusWriter.body.String())
}
}
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)
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册