蒋吉兆
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 |
|||
|
|||
import ( |
|||
"bytes" |
|||
"gin-vue-admin/init/qmlog" |
|||
"github.com/gin-gonic/gin" |
|||
"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() |
|||
// 处理请求
|
|||
c.Next() |
|||
// 结束时间
|
|||
end := time.Now() |
|||
//执行时间
|
|||
latency := end.Sub(start) |
|||
|
|||
// 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() |
|||
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