package main import ( "fmt" "os" "time" "github.com/gin-gonic/gin" rotatelogs "github.com/lestrrat-go/file-rotatelogs" "github.com/rifflock/lfshook" log "github.com/sirupsen/logrus" ) func init() { //日志初始化 log.SetOutput(os.Stdout) log.SetLevel(log.InfoLevel) log.AddHook(newLfsHook(72)) } func newLfsHook(maxRemainCnt uint) log.Hook { //检查与创建日志文件夹 _, err := os.Stat("logs") if os.IsNotExist(err) { os.Mkdir("logs", 0755) } logName := fmt.Sprintf(`logs/%s`, APPNAME) writer, err := rotatelogs.New( logName+"%Y%m%d%H.log", rotatelogs.WithLinkName(logName), rotatelogs.WithRotationTime(time.Hour), rotatelogs.WithRotationCount(maxRemainCnt), ) if err != nil { panic("config local file system for logger error: " + err.Error()) } log.SetLevel(log.DebugLevel) lfsHook := lfshook.NewHook(lfshook.WriterMap{ log.DebugLevel: writer, log.InfoLevel: writer, log.WarnLevel: writer, log.ErrorLevel: writer, log.FatalLevel: writer, log.PanicLevel: writer, }, &log.TextFormatter{DisableColors: true}) return lfsHook } //LoggerToFile 日志记录到文件 func loggerToFile() gin.HandlerFunc { return func(c *gin.Context) { // 开始时间 startTime := time.Now() // 处理请求 c.Next() // 结束时间 endTime := time.Now() // 执行时间 latencyTime := endTime.Sub(startTime) // 请求方式 reqMethod := c.Request.Method // 请求路由 reqURI := c.Request.RequestURI // 状态码 statusCode := c.Writer.Status() // 请求IP clientIP := c.ClientIP() // 日志格式 log.Infof("| %3d | %13v | %15s | %s | %s |", statusCode, latencyTime, clientIP, reqMethod, reqURI, ) } }