|
@ -1,34 +1,56 @@ |
|
|
package middleware |
|
|
package middleware |
|
|
|
|
|
|
|
|
import ( |
|
|
import ( |
|
|
"gin-vue-admin/init/qmlog" |
|
|
|
|
|
"github.com/gin-gonic/gin" |
|
|
|
|
|
|
|
|
"bytes" |
|
|
|
|
|
"net/http/httputil" |
|
|
"time" |
|
|
"time" |
|
|
|
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin" |
|
|
|
|
|
"qiniupkg.com/x/log.v7" |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
func Logger() gin.HandlerFunc { |
|
|
func Logger() gin.HandlerFunc { |
|
|
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 |
|
|
|
|
|
// 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) |
|
|
|
|
|
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|", |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log.Infof(`| %s | %3d | %13v | %s \n`, |
|
|
|
|
|
`Response:`, |
|
|
statusCode, |
|
|
statusCode, |
|
|
latency, |
|
|
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) |
|
|
|
|
|
} |