package internal import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "miniapp/global" "time" ) var Zap = new(_zap) type _zap struct{} // GetEncoder 获取 zapcore.Encoder // Author [SliverHorn](https://github.com/SliverHorn) func (z *_zap) GetEncoder() zapcore.Encoder { if global.GVA_CONFIG.Zap.Format == "json" { return zapcore.NewJSONEncoder(z.GetEncoderConfig()) } return zapcore.NewConsoleEncoder(z.GetEncoderConfig()) } // GetEncoderConfig 获取zapcore.EncoderConfig // Author [SliverHorn](https://github.com/SliverHorn) func (z *_zap) GetEncoderConfig() zapcore.EncoderConfig { return zapcore.EncoderConfig{ MessageKey: "message", LevelKey: "level", TimeKey: "time", NameKey: "logger", CallerKey: "caller", StacktraceKey: global.GVA_CONFIG.Zap.StacktraceKey, LineEnding: zapcore.DefaultLineEnding, EncodeLevel: global.GVA_CONFIG.Zap.ZapEncodeLevel(), EncodeTime: z.CustomTimeEncoder, EncodeDuration: zapcore.SecondsDurationEncoder, EncodeCaller: zapcore.FullCallerEncoder, } } // GetEncoderCore 获取Encoder的 zapcore.Core // Author [SliverHorn](https://github.com/SliverHorn) func (z *_zap) GetEncoderCore(l zapcore.Level, level zap.LevelEnablerFunc) zapcore.Core { writer := FileRotatelogs.GetWriteSyncer(l.String()) // 日志分割 return zapcore.NewCore(z.GetEncoder(), writer, level) } // CustomTimeEncoder 自定义日志输出时间格式 // Author [SliverHorn](https://github.com/SliverHorn) func (z *_zap) CustomTimeEncoder(t time.Time, encoder zapcore.PrimitiveArrayEncoder) { encoder.AppendString(global.GVA_CONFIG.Zap.Prefix + t.Format("2006/01/02 - 15:04:05.000")) } // GetZapCores 根据配置文件的Level获取 []zapcore.Core // Author [SliverHorn](https://github.com/SliverHorn) func (z *_zap) GetZapCores() []zapcore.Core { cores := make([]zapcore.Core, 0, 7) for level := global.GVA_CONFIG.Zap.TransportLevel(); level <= zapcore.FatalLevel; level++ { cores = append(cores, z.GetEncoderCore(level, z.GetLevelPriority(level))) } return cores } // GetLevelPriority 根据 zapcore.Level 获取 zap.LevelEnablerFunc // Author [SliverHorn](https://github.com/SliverHorn) func (z *_zap) GetLevelPriority(level zapcore.Level) zap.LevelEnablerFunc { switch level { case zapcore.DebugLevel: return func(level zapcore.Level) bool { // 调试级别 return level == zap.DebugLevel } case zapcore.InfoLevel: return func(level zapcore.Level) bool { // 日志级别 return level == zap.InfoLevel } case zapcore.WarnLevel: return func(level zapcore.Level) bool { // 警告级别 return level == zap.WarnLevel } case zapcore.ErrorLevel: return func(level zapcore.Level) bool { // 错误级别 return level == zap.ErrorLevel } case zapcore.DPanicLevel: return func(level zapcore.Level) bool { // dpanic级别 return level == zap.DPanicLevel } case zapcore.PanicLevel: return func(level zapcore.Level) bool { // panic级别 return level == zap.PanicLevel } case zapcore.FatalLevel: return func(level zapcore.Level) bool { // 终止级别 return level == zap.FatalLevel } default: return func(level zapcore.Level) bool { // 调试级别 return level == zap.DebugLevel } } }