package core import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" "time" ) type Logger struct { zap *zap.SugaredLogger loki lokiClient } // 初始化Zap日志工具 func initZapLogger() *zap.SugaredLogger { // 配置 sugaredLogger writer := zapcore.AddSync(os.Stdout) // 自定义时间输出格式 customTimeEncoder := func(t time.Time, enc zapcore.PrimitiveArrayEncoder) { enc.AppendString("[" + t.Format("2006-01-02 15:04:05.000") + "]") } // 格式相关的配置 encoderConfig := zap.NewProductionEncoderConfig() // 修改时间戳的格式 encoderConfig.EncodeTime = customTimeEncoder // 日志级别使用大写带颜色显示 encoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder encoder := zapcore.NewConsoleEncoder(encoderConfig) // 将日志级别设置为 DEBUG core := zapcore.NewCore(encoder, writer, zapcore.DebugLevel) // 增加 caller 信息 logger := zap.New(core, zap.AddCaller()) return logger.Sugar() } // InitLogger 初始化日志系统 func InitLogger() { zapLogger := initZapLogger() loki := initLokiClient() Log = Logger{zap: zapLogger, loki: loki} } // Debug Debug级别日志 func (l Logger) Debug(template string, args ...interface{}) { l.zap.Debugf(template, args...) l.loki.Debug("", template, args...) } // Info Info级别日志 func (l Logger) Info(template string, args ...interface{}) { l.zap.Infof(template, args...) l.loki.Info("", template, args...) } // Warn Warn级别日志 func (l Logger) Warn(template string, args ...interface{}) { l.zap.Warnf(template, args...) l.loki.Warn("", template, args...) } // Error Error级别日志 func (l Logger) Error(template string, args ...interface{}) { l.zap.Errorf(template, args...) l.loki.Error("", template, args...) } // Panic 打印异常并退出系统 func (l Logger) Panic(template string, args ...interface{}) { l.loki.Error("", template, args...) l.zap.Panicf(template, args...) }