蒋吉兆
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 51 additions and 36 deletions
@ -1,34 +1,65 @@ |
|||||
package middleware |
package middleware |
||||
|
|
||||
import ( |
import ( |
||||
|
"bytes" |
||||
"gin-vue-admin/init/qmlog" |
"gin-vue-admin/init/qmlog" |
||||
"github.com/gin-gonic/gin" |
|
||||
|
"net/http/httputil" |
||||
|
"strings" |
||||
"time" |
"time" |
||||
|
|
||||
|
"github.com/gin-gonic/gin" |
||||
) |
) |
||||
|
|
||||
func Logger() gin.HandlerFunc { |
func Logger() gin.HandlerFunc { |
||||
|
log := qmlog.QMLog |
||||
return func(c *gin.Context) { |
return func(c *gin.Context) { |
||||
// 开始时间
|
|
||||
|
// request time
|
||||
start := time.Now() |
start := time.Now() |
||||
// 处理请求
|
|
||||
c.Next() |
|
||||
// 结束时间
|
|
||||
end := time.Now() |
|
||||
//执行时间
|
|
||||
latency := end.Sub(start) |
|
||||
|
|
||||
|
// request path
|
||||
path := c.Request.URL.Path |
path := c.Request.URL.Path |
||||
|
logFlag := true |
||||
|
if strings.Contains(path, "swagger") { |
||||
|
logFlag = false |
||||
|
} |
||||
|
// request ip
|
||||
clientIP := c.ClientIP() |
clientIP := c.ClientIP() |
||||
|
// method
|
||||
method := c.Request.Method |
method := c.Request.Method |
||||
|
// copy request content
|
||||
|
req, _ := httputil.DumpRequest(c.Request, true) |
||||
|
if logFlag { |
||||
|
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() |
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|", |
|
||||
statusCode, |
|
||||
latency, |
|
||||
clientIP, |
|
||||
method, path, requestParams, |
|
||||
) |
|
||||
|
if logFlag { |
||||
|
log.Infof(`| %s | %3d | %13v | %s \n`, |
||||
|
`Response:`, |
||||
|
statusCode, |
||||
|
latency, |
||||
|
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) |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue