123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package middleware
- import (
- "bytes"
- "gadmin/config"
- "github.com/gin-gonic/gin"
- "github.com/sirupsen/logrus"
- "io"
- "net/http"
- "time"
- )
- // Logger 访问日志
- func Logger(c *gin.Context) {
- var (
- start = time.Now() // 开始时间
- body []byte
- err error
- )
- if c.Request.Method != http.MethodGet {
- body, err = io.ReadAll(c.Request.Body)
- if err != nil {
- logrus.Warnf("read body from request error:%v", err)
- } else {
- c.Request.Body = io.NopCloser(bytes.NewBuffer(body))
- }
- }
- writer := responseBodyWriter{
- ResponseWriter: c.Writer,
- body: &bytes.Buffer{},
- }
- c.Writer = writer
- // 处理请求
- c.Next()
- // 结束时间
- var (
- getMap = make(map[string]interface{})
- headerMap = make(map[string]interface{})
- end = time.Now()
- )
- for k, v := range c.Request.URL.Query() {
- getMap[k] = v
- }
- for k, v := range c.Request.Header {
- headerMap[k] = v
- }
- //remark := ""
- //if c.Request.Method == http.MethodPost {
- // remark = config.GetMenuName(c.Request.URL.Path)
- //}
- //
- //logrus.Warnf("models:%#v", models)
- // 日志文件
- //config.AccessLog.WithFields(utility.JSONMethod(models)).Infoln()
- data := logrus.Fields{
- "clientIp": c.ClientIP(), // 访问IP
- "method": c.Request.Method, // 访问方式
- "get": c.Request.URL.Query().Encode(),
- "latency": end.Sub(start), // 执行事件
- "code": c.Writer.Status(), // 状态码
- "path": c.Request.URL.Path, // 访问路由
- "ua": c.Request.UserAgent(),
- }
- config.AccessLog.WithFields(data).Infoln()
- }
- type responseBodyWriter struct {
- gin.ResponseWriter
- body *bytes.Buffer
- }
- func (r responseBodyWriter) Write(b []byte) (int, error) {
- r.body.Write(b)
- return r.ResponseWriter.Write(b)
- }
|