Files
work_cation/pkg/logger/logger.go
T

55 lines
1.9 KiB
Go

package logger
import (
"io"
"log"
"os"
"path/filepath"
"time"
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
"github.com/rifflock/lfshook"
"github.com/sirupsen/logrus"
)
func Init() {
// 添加日志切割输出
var hook = NewLfsHook("glogs", time.Hour*12, 6)
logrus.AddHook(hook)
// 忽略控制台打印
logrus.SetOutput(io.Discard)
// 展示日志行数
logrus.SetReportCaller(true)
}
// NewLfsHook 日志钩子(日志拦截,并重定向)
func NewLfsHook(logName string, rotationTime time.Duration, leastDay uint) logrus.Hook {
_ = os.Mkdir(logName, os.ModeDir)
// 可设置按不同level创建不同的文件名,咱们把6中日志都写到同一个writer中
lfsHook := lfshook.NewHook(lfshook.WriterMap{
logrus.DebugLevel: NewWriter(filepath.Join(logName, "debug"), rotationTime, leastDay),
logrus.InfoLevel: NewWriter(filepath.Join(logName, "info"), rotationTime, leastDay),
logrus.WarnLevel: NewWriter(filepath.Join(logName, "warn"), rotationTime, leastDay),
logrus.ErrorLevel: NewWriter(filepath.Join(logName, "error"), rotationTime, leastDay),
logrus.FatalLevel: NewWriter(filepath.Join(logName, "fatal"), rotationTime, leastDay),
logrus.PanicLevel: NewWriter(filepath.Join(logName, "panic"), rotationTime, leastDay),
}, nil) //&logrus.JSONFormatter{TimestampFormat: "2006-01-02 15:04:05"}
return lfsHook
}
func NewWriter(logName string, rotationTime time.Duration, leastDay uint) io.Writer {
writer, err := rotatelogs.New(
// 1 日志文件名字
logName+".%Y-%m-%d_%H_%M", // _%S
// 2 日志周期(默认每86400秒/一天旋转一次)
rotatelogs.WithRotationTime(rotationTime),
// 3 清除历史 (WithMaxAge和WithRotationCount只能选其一)
//rotatelogs.WithMaxAge(time.Hour*24*7), //默认每7天清除下日志文件
rotatelogs.WithRotationCount(leastDay), //只保留最近的N个日志文件
)
if err != nil {
log.Panic(err)
}
return writer
}