12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package middleware
- import (
- "bytes"
- "gin-vue-admin/init/initlog"
- "net/http/httputil"
- "strings"
- "time"
- "github.com/gin-gonic/gin"
- )
- func Logger() gin.HandlerFunc {
- return func(c *gin.Context) {
-
- start := time.Now()
-
- path := c.Request.URL.Path
- logFlag := true
- if strings.Contains(path, "swagger") {
- logFlag = false
- }
-
- clientIP := c.ClientIP()
-
- method := c.Request.Method
-
- req, _ := httputil.DumpRequest(c.Request, true)
- if logFlag {
- log.L.Debug(
- "Request:", method, clientIP, path, string(req))
- }
-
- cusWriter := &responseBodyWriter{
- ResponseWriter: c.Writer,
- body: bytes.NewBufferString(""),
- }
- c.Writer = cusWriter
-
- c.Next()
-
- end := time.Now()
-
- latency := end.Sub(start)
- statusCode := c.Writer.Status()
- if logFlag {
- log.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)
- }
|