85 lines
2.8 KiB
Go
85 lines
2.8 KiB
Go
|
package zaplog
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"time"
|
||
|
|
||
|
"go.uber.org/zap"
|
||
|
"go.uber.org/zap/zapcore"
|
||
|
"gopkg.in/natefinch/lumberjack.v2"
|
||
|
)
|
||
|
|
||
|
func textencoderConfig() zapcore.EncoderConfig {
|
||
|
encoderConfig := zap.NewProductionEncoderConfig()
|
||
|
//时间格式
|
||
|
encoderConfig.EncodeTime = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||
|
enc.AppendString("[" + t.Format("2006-01-02 15:04:05") + "]")
|
||
|
}
|
||
|
//日志等级字母大写
|
||
|
encoderConfig.EncodeLevel = func(level zapcore.Level, enc zapcore.PrimitiveArrayEncoder) {
|
||
|
enc.AppendString("[" + level.CapitalString() + "]")
|
||
|
}
|
||
|
return encoderConfig
|
||
|
}
|
||
|
|
||
|
func jsonencoderConfig() zapcore.EncoderConfig {
|
||
|
encoderConfig := zap.NewProductionEncoderConfig()
|
||
|
//时间格式
|
||
|
encoderConfig.EncodeTime = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||
|
enc.AppendString(t.Format("2006-01-02 15:04:05"))
|
||
|
}
|
||
|
//日志等级字母大写
|
||
|
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
|
||
|
return encoderConfig
|
||
|
}
|
||
|
|
||
|
func New(config ...ZapConfig) *zap.SugaredLogger {
|
||
|
cfg := configDefault(config...)
|
||
|
|
||
|
var encoder zapcore.Encoder
|
||
|
encoder = zapcore.NewConsoleEncoder(textencoderConfig())
|
||
|
if cfg.JsonFormat {
|
||
|
encoder = zapcore.NewJSONEncoder(jsonencoderConfig())
|
||
|
}
|
||
|
|
||
|
//日志级别 error 级别
|
||
|
highPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
|
||
|
return lev >= zap.ErrorLevel
|
||
|
})
|
||
|
//info 和 debug 级别,debug 级别是最低的
|
||
|
lowPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
|
||
|
return lev < zap.ErrorLevel && lev >= zap.DebugLevel
|
||
|
})
|
||
|
//info文件 writeSyncer
|
||
|
infoFileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{
|
||
|
Filename: cfg.NormalLog.Filename,
|
||
|
MaxSize: cfg.NormalLog.FileSize_MB,
|
||
|
MaxBackups: cfg.NormalLog.FileBackup,
|
||
|
MaxAge: cfg.NormalLog.FileAge_DAY,
|
||
|
Compress: true,
|
||
|
})
|
||
|
|
||
|
//第三个及之后的参数为写入文件的日志级别,ErrorLevel模式只记录error级别的日志
|
||
|
infoFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(infoFileWriteSyncer,
|
||
|
zapcore.AddSync(os.Stdout)), lowPriority)
|
||
|
|
||
|
//error文件writeSyncer
|
||
|
errorFileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{
|
||
|
Filename: cfg.ErrorLog.Filename,
|
||
|
MaxSize: cfg.ErrorLog.FileSize_MB,
|
||
|
MaxBackups: cfg.ErrorLog.FileBackup,
|
||
|
MaxAge: cfg.ErrorLog.FileAge_DAY,
|
||
|
Compress: true,
|
||
|
})
|
||
|
|
||
|
//第三个及之后的参数为写入文件的日志级别,ErrorLevel模式只记录error级别的日志
|
||
|
errorFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(errorFileWriteSyncer,
|
||
|
zapcore.AddSync(os.Stdout)), highPriority)
|
||
|
var coreArr []zapcore.Core
|
||
|
coreArr = append(coreArr, infoFileCore)
|
||
|
coreArr = append(coreArr, errorFileCore)
|
||
|
//zap.AddCaller()为显示文件名和行号,可省略
|
||
|
// return zap.New(zapcore.NewTee(coreArr...), zap.AddCaller())
|
||
|
return zap.New(zapcore.NewTee(coreArr...)).Sugar()
|
||
|
}
|