90 lines
1.7 KiB
Go
90 lines
1.7 KiB
Go
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,
|
|
)
|
|
}
|
|
}
|