68 lines
2.0 KiB
Go
Executable File
68 lines
2.0 KiB
Go
Executable File
package logger
|
||
|
||
import (
|
||
"beacon/config"
|
||
"github.com/natefinch/lumberjack"
|
||
"go.uber.org/zap"
|
||
"go.uber.org/zap/zapcore"
|
||
"os"
|
||
)
|
||
|
||
var Lg *zap.Logger
|
||
|
||
// zap日志库三要素
|
||
// 1.encoder编码 2.输出位置 3.日志级别
|
||
|
||
// Init 初始化lg
|
||
func Init(cfg *config.LogConfig, mode string) (err error) {
|
||
writeSyncer := getLogWriter(cfg.Filename, cfg.MaxSize, cfg.MaxBackups, cfg.MaxAge)
|
||
writeErrSyncer := getLogWriter(cfg.FilenameErr, cfg.MaxSize, cfg.MaxBackups, cfg.MaxAge)
|
||
|
||
encoder := getEncoder()
|
||
var l = new(zapcore.Level)
|
||
err = l.UnmarshalText([]byte(cfg.Level))
|
||
if err != nil {
|
||
return
|
||
}
|
||
var core zapcore.Core
|
||
if mode == "dev" {
|
||
// 进入开发模式,日志输出到终端
|
||
consoleEncoder := zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig())
|
||
core = zapcore.NewTee(
|
||
zapcore.NewCore(encoder, writeSyncer, l),
|
||
zapcore.NewCore(consoleEncoder, zapcore.Lock(os.Stdout), zapcore.DebugLevel),
|
||
)
|
||
} else {
|
||
confCore := zapcore.NewCore(encoder, writeSyncer, l)
|
||
errCore := zapcore.NewCore(encoder, writeErrSyncer, zapcore.ErrorLevel)
|
||
core = zapcore.NewTee(confCore, errCore)
|
||
}
|
||
// 复习回顾:日志默认输出到app.log,如何将err日志单独在 app.err.log 记录一份
|
||
|
||
Lg = zap.New(core, zap.AddCaller()) // zap.AddCaller() 添加调用栈信息
|
||
|
||
zap.ReplaceGlobals(Lg) // 替换zap包全局的logger
|
||
zap.L().Info("init logger success")
|
||
return
|
||
}
|
||
|
||
func getEncoder() zapcore.Encoder {
|
||
encoderConfig := zap.NewProductionEncoderConfig()
|
||
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
|
||
encoderConfig.TimeKey = "time"
|
||
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
|
||
encoderConfig.EncodeDuration = zapcore.SecondsDurationEncoder
|
||
encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
|
||
return zapcore.NewJSONEncoder(encoderConfig)
|
||
}
|
||
|
||
func getLogWriter(filename string, maxSize, maxBackup, maxAge int) zapcore.WriteSyncer {
|
||
lumberJackLogger := &lumberjack.Logger{
|
||
Filename: filename,
|
||
MaxSize: maxSize,
|
||
MaxBackups: maxBackup,
|
||
MaxAge: maxAge,
|
||
}
|
||
return zapcore.AddSync(lumberJackLogger)
|
||
}
|