api/core/logger.go

75 lines
1.9 KiB
Go

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...)
}