package zap import ( zapLogger "github.com/go-kratos/kratos/contrib/log/zap/v2" "github.com/go-kratos/kratos/v2/log" "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" conf "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1" ) // NewLogger 创建一个新的日志记录器 - Zap func NewLogger(cfg *conf.Logger) log.Logger { if cfg == nil || cfg.Zap == nil { return nil } encoderConfig := zap.NewProductionEncoderConfig() encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder encoderConfig.TimeKey = "time" encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder encoderConfig.EncodeDuration = zapcore.SecondsDurationEncoder encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder jsonEncoder := zapcore.NewJSONEncoder(encoderConfig) lumberJackLogger := &lumberjack.Logger{ Filename: cfg.Zap.Filename, MaxSize: int(cfg.Zap.MaxSize), MaxBackups: int(cfg.Zap.MaxBackups), MaxAge: int(cfg.Zap.MaxAge), } writeSyncer := zapcore.AddSync(lumberJackLogger) var lvl = new(zapcore.Level) if err := lvl.UnmarshalText([]byte(cfg.Zap.Level)); err != nil { return nil } core := zapcore.NewCore(jsonEncoder, writeSyncer, lvl) logger := zap.New(core).WithOptions() wrapped := zapLogger.NewLogger(logger) return wrapped }