12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package middleware
- import (
- "bytes"
- "gin-vue-admin/init"
- "net/http/httputil"
- "strings"
- "time"
- "github.com/gin-gonic/gin"
- )
- func Logger() gin.HandlerFunc {
- 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 {
- init.L.Debug(
- "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 {
- init.L.Debug(
- "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)
- }
|