You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package middleware
import ( "fmt" "github.com/gin-gonic/gin" "github.com/lestrrat/go-file-rotatelogs" "github.com/rifflock/lfshook" "github.com/sirupsen/logrus" "os" "time" )
func Logger() gin.HandlerFunc { logClient := logrus.New() //禁止logrus的输出
src, err := os.OpenFile(os.DevNull, os.O_APPEND|os.O_WRONLY, os.ModeAppend) if err != nil { fmt.Println("err", err) } logClient.Out = src logClient.SetLevel(logrus.DebugLevel) apiLogPath := "api.log" logWriter, err := rotatelogs.New( apiLogPath+".%Y-%m-%d-%H-%M.log", rotatelogs.WithLinkName(apiLogPath), // 生成软链,指向最新日志文件
rotatelogs.WithMaxAge(7*24*time.Hour), // 文件最大保存时间
rotatelogs.WithRotationTime(24*time.Hour), // 日志切割时间间隔
) writeMap := lfshook.WriterMap{ logrus.InfoLevel: logWriter, logrus.FatalLevel: logWriter, } lfHook := lfshook.NewHook(writeMap, &logrus.JSONFormatter{}) logClient.AddHook(lfHook)
return func(c *gin.Context) { // 开始时间
start := time.Now() // 处理请求
c.Next() // 结束时间
end := time.Now() //执行时间
latency := end.Sub(start)
path := c.Request.URL.Path clientIP := c.ClientIP() method := c.Request.Method statusCode := c.Writer.Status() buf := make([]byte, 1024) n, _ := c.Request.Body.Read(buf) requestParams := buf[0:n] logClient.Infof("| %3d | %13v | %15s | %s %s |%s|", statusCode, latency, clientIP, method, path, requestParams, ) } }
|