1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| package middleware
import ( "fmt" "github.com/gin-gonic/gin" rotatelogs "github.com/lestrrat-go/file-rotatelogs" "github.com/rifflock/lfshook" "github.com/sirupsen/logrus" "os" "path" "time" )
var ( logFilePath = "./" logFileName = "system.log" )
func LoggerMiddleware() gin.HandlerFunc { fileName := path.Join(logFilePath, logFileName) src, err := os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY, os.ModeAppend) if err != nil { fmt.Println("err", err) } logger := logrus.New() logger.SetLevel(logrus.DebugLevel) logger.Out = src
logWriter, err := rotatelogs.New( fileName+".%Y%m%d.log",
rotatelogs.WithLinkName(fileName),
rotatelogs.WithMaxAge(7*24*time.Hour),
rotatelogs.WithRotationTime(24*time.Hour), )
writeMap := lfshook.WriterMap{ logrus.InfoLevel: logWriter, logrus.FatalLevel: logWriter, logrus.DebugLevel: logWriter, logrus.WarnLevel: logWriter, logrus.ErrorLevel: logWriter, logrus.PanicLevel: logWriter, }
logger.AddHook(lfshook.NewHook(writeMap, &logrus.JSONFormatter{ TimestampFormat: "2006-01-02 15:04:05", }))
return func(c *gin.Context) { startTime := time.Now() c.Next() endTime := time.Now() latencyTime := endTime.Sub(startTime) reqMethod := c.Request.Method reqUrl := c.Request.RequestURI statusCode := c.Writer.Status() clientIP := c.ClientIP()
logger.WithFields(logrus.Fields{ "status_code": statusCode, "latency_time": latencyTime, "client_ip": clientIP, "req_method": reqMethod, "req_uri": reqUrl, }).Info()
} }
|