1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package middleware
- import (
- "bytes"
- "gin-vue-admin/init/qmlog"
- "net/http/httputil"
- "strings"
- "time"
- "github.com/gin-gonic/gin"
- )
- func Logger() gin.HandlerFunc {
- log := qmlog.QMLog
- return func(c *gin.Context) {
- // request time
- start := time.Now()
- // request path
- path := c.Request.URL.Path
- logFlag := true
- if strings.Contains(path, "swagger") {
- logFlag = false
- }
- // request ip
- clientIP := c.ClientIP()
- // 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()
- 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)
- }
|