You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.3 KiB
91 lines
3.3 KiB
package logger
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"strconv"
|
|
"time"
|
|
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
"gopkg.in/natefinch/lumberjack.v2"
|
|
)
|
|
|
|
// GetEncoder 负责设置 encoding 的日志格式
|
|
func GetEncoder(color bool) zapcore.Encoder {
|
|
// 获取一个指定的的EncoderConfig,进行自定义
|
|
encodeConfig := zap.NewProductionEncoderConfig()
|
|
// 序列化时间。eg: 2022-09-01T19:11:35.921+0800
|
|
encodeConfig.EncodeTime = zapcore.ISO8601TimeEncoder
|
|
// "time":"2022-09-01T19:11:35.921+0800"
|
|
encodeConfig.TimeKey = "time"
|
|
// 将Level序列化为全大写字符串。例如,将info level序列化为INFO。
|
|
if color {
|
|
encodeConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
|
|
} else {
|
|
encodeConfig.EncodeLevel = zapcore.CapitalLevelEncoder
|
|
}
|
|
// 以 package/file:行 的格式 序列化调用程序,从完整路径中删除除最后一个目录外的所有目录。
|
|
encodeConfig.EncodeCaller = zapcore.ShortCallerEncoder
|
|
return zapcore.NewConsoleEncoder(encodeConfig)
|
|
}
|
|
|
|
func NewCore(cfg *Config) zapcore.Core {
|
|
encoder := GetEncoder(false)
|
|
now := strconv.FormatInt(time.Now().Unix(), 10)
|
|
fileName := filepath.Join(cfg.FilePath, now+".log")
|
|
ljLogger := &lumberjack.Logger{
|
|
Filename: fileName, // 文件位置
|
|
MaxSize: cfg.MaxSize, // 进行切割之前,日志文件的最大大小(MB为单位)
|
|
MaxAge: cfg.MaxAge, // 保留旧文件的最大天数
|
|
MaxBackups: cfg.MaxBackups, // 保留旧文件的最大个数
|
|
Compress: cfg.Compress, // 是否压缩/归档旧文件
|
|
}
|
|
level, err := zapcore.ParseLevel(cfg.Level)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
return zapcore.NewCore(encoder, zapcore.AddSync(ljLogger), level)
|
|
}
|
|
|
|
func NewMultiCore(cfg *Config) zapcore.Core {
|
|
now := strconv.FormatInt(time.Now().Unix(), 10)
|
|
level, err := zapcore.ParseLevel(cfg.Level)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
|
|
infoEncoder := GetEncoder(false)
|
|
infoFileName := filepath.Join(cfg.FilePath, now+".log")
|
|
infoLogger := &lumberjack.Logger{
|
|
Filename: infoFileName, // 文件位置
|
|
MaxSize: cfg.MaxSize, // 进行切割之前,日志文件的最大大小(MB为单位)
|
|
MaxAge: cfg.MaxAge, // 保留旧文件的最大天数
|
|
MaxBackups: cfg.MaxBackups, // 保留旧文件的最大个数
|
|
Compress: cfg.Compress, // 是否压缩/归档旧文件
|
|
}
|
|
infoPrior := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
|
|
return lvl >= level && lvl < zap.ErrorLevel && lvl >= zap.DebugLevel
|
|
})
|
|
infoCore := zapcore.NewCore(infoEncoder, zapcore.AddSync(infoLogger), infoPrior)
|
|
|
|
errEncoder := GetEncoder(true)
|
|
errFileName := filepath.Join(cfg.FilePath, now+"-error.log")
|
|
errLogger := &lumberjack.Logger{
|
|
Filename: errFileName, // 文件位置
|
|
MaxSize: cfg.MaxSize, // 进行切割之前,日志文件的最大大小(MB为单位)
|
|
MaxAge: cfg.MaxAge, // 保留旧文件的最大天数
|
|
MaxBackups: cfg.MaxBackups, // 保留旧文件的最大个数
|
|
Compress: cfg.Compress, // 是否压缩/归档旧文件
|
|
}
|
|
errPrior := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
|
|
return lvl >= level && lvl >= zap.ErrorLevel
|
|
})
|
|
errCore := zapcore.NewCore(errEncoder,
|
|
zapcore.NewMultiWriteSyncer(zapcore.AddSync(errLogger), zapcore.AddSync(os.Stdout)), errPrior)
|
|
|
|
var coreArr []zapcore.Core
|
|
coreArr = append(coreArr, infoCore, errCore)
|
|
return zapcore.NewTee(coreArr...)
|
|
}
|
|
|