81 lines
1.9 KiB
Go
81 lines
1.9 KiB
Go
package logger
|
||
|
||
import (
|
||
"fmt"
|
||
"io"
|
||
"time"
|
||
|
||
rotatelogs "github.com/lestrrat/go-file-rotatelogs"
|
||
"go.uber.org/zap"
|
||
"go.uber.org/zap/zapcore"
|
||
)
|
||
|
||
var SugarLogger *zap.SugaredLogger
|
||
|
||
func main() {
|
||
fmt.Println("begin main")
|
||
|
||
}
|
||
|
||
func InitLogger() {
|
||
encoder := getEncoder()
|
||
|
||
//两个interface,判断日志等级
|
||
//warnlevel以下归到info日志
|
||
infoLevel := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
|
||
return lvl < zapcore.WarnLevel
|
||
})
|
||
//warnlevel及以上归到warn日志
|
||
warnLevel := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
|
||
return lvl >= zapcore.WarnLevel
|
||
})
|
||
|
||
infoWriter := getLogWriter("/", 1, 1, 1)
|
||
warnWriter := getLogWriter("/", 1, 1, 1)
|
||
|
||
//创建zap.Core,for logger
|
||
core := zapcore.NewTee(
|
||
zapcore.NewCore(encoder, infoWriter, infoLevel),
|
||
zapcore.NewCore(encoder, warnWriter, warnLevel),
|
||
)
|
||
//生成Logger
|
||
logger := zap.New(core, zap.AddCaller())
|
||
SugarLogger = logger.Sugar()
|
||
}
|
||
|
||
func getEncoderTest() zapcore.Encoder {
|
||
encoderConfig := zap.NewProductionEncoderConfig()
|
||
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
|
||
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
|
||
return zapcore.NewConsoleEncoder(encoderConfig)
|
||
}
|
||
|
||
func getLogWriterTest(filePath string) zapcore.WriteSyncer {
|
||
warnIoWriter := getWriter(filePath)
|
||
return zapcore.AddSync(warnIoWriter)
|
||
}
|
||
|
||
//日志文件切割
|
||
func getWriter(filename string) io.Writer {
|
||
// 保存日志30天,每24小时分割一次日志
|
||
/*
|
||
hook, err := rotatelogs.New(
|
||
filename+"_%Y%m%d.log",
|
||
rotatelogs.WithLinkName(filename),
|
||
rotatelogs.WithMaxAge(time.Hour*24*30),
|
||
rotatelogs.WithRotationTime(time.Hour*24),
|
||
)
|
||
*/
|
||
//保存日志30天,每1分钟分割一次日志
|
||
hook, err := rotatelogs.New(
|
||
filename+"_%Y%m%d%H%M.log",
|
||
rotatelogs.WithLinkName(filename),
|
||
rotatelogs.WithMaxAge(time.Hour*24*30),
|
||
rotatelogs.WithRotationTime(time.Minute*1),
|
||
)
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
return hook
|
||
}
|