mc-client-updater-server/internal/api/v1/middleware/logger.go

44 lines
1004 B
Go

package middleware
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
"mc-client-updater-server/pkg/log"
"time"
)
func LoggerMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
startTime := time.Now()
c.Next() // 调用该请求的剩余处理程序
stopTime := time.Since(startTime)
spendTime := fmt.Sprintf("%.3f ms", float64(stopTime.Nanoseconds())/1000000)
statusCode := c.Writer.Status()
dataSize := c.Writer.Size()
if dataSize < 0 {
dataSize = 0
}
method := c.Request.Method
url := c.Request.RequestURI
Log := log.Logger.WithFields(logrus.Fields{
"spendTime": spendTime,
"path": url,
"method": method,
"status": statusCode,
})
if len(c.Errors) > 0 { // 内部错误
Log.Error(c.Errors.ByType(gin.ErrorTypePrivate))
}
if statusCode == 500 || (statusCode >= 5000 && statusCode < 6000) {
Log.Error()
} else if statusCode >= 400 && statusCode < 500 {
Log.Warn()
} else {
Log.Info()
}
}
}