- OAuth认证系统(Gitea + Lua扩展) - Git自动化操作(本地/SSH远程) - 实时进度WebSocket推送 - 现代化Tab界面UI - Cobra CLI命令行(init/version/serve) - 完整构建系统(Makefile + Taskfile) - UPX压缩支持(体积减少70%)
82 lines
2.0 KiB
Go
82 lines
2.0 KiB
Go
package db
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"go.uber.org/zap"
|
|
"gorm.io/gorm/logger"
|
|
"gorm.io/gorm/utils"
|
|
)
|
|
|
|
type ZapGormLogger struct {
|
|
ZapLogger *zap.Logger
|
|
LogLevel logger.LogLevel
|
|
SlowThreshold time.Duration
|
|
}
|
|
|
|
func NewZapGormLogger(zapLogger *zap.Logger) *ZapGormLogger {
|
|
return &ZapGormLogger{
|
|
ZapLogger: zapLogger,
|
|
LogLevel: logger.Info,
|
|
SlowThreshold: time.Second, // 1s 慢查询阈值
|
|
}
|
|
}
|
|
|
|
func (l *ZapGormLogger) LogMode(level logger.LogLevel) logger.Interface {
|
|
newlogger := *l
|
|
newlogger.LogLevel = level
|
|
return &newlogger
|
|
}
|
|
|
|
func (l *ZapGormLogger) Info(ctx context.Context, msg string, data ...interface{}) {
|
|
if l.LogLevel >= logger.Info {
|
|
l.ZapLogger.Sugar().Infof(msg, data...)
|
|
}
|
|
}
|
|
|
|
func (l *ZapGormLogger) Warn(ctx context.Context, msg string, data ...interface{}) {
|
|
if l.LogLevel >= logger.Warn {
|
|
l.ZapLogger.Sugar().Warnf(msg, data...)
|
|
}
|
|
}
|
|
|
|
func (l *ZapGormLogger) Error(ctx context.Context, msg string, data ...interface{}) {
|
|
if l.LogLevel >= logger.Error {
|
|
l.ZapLogger.Sugar().Errorf(msg, data...)
|
|
}
|
|
}
|
|
|
|
func (l *ZapGormLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error) {
|
|
if l.LogLevel <= logger.Silent {
|
|
return
|
|
}
|
|
elapsed := time.Since(begin)
|
|
sql, rows := fc()
|
|
|
|
switch {
|
|
case err != nil && l.LogLevel >= logger.Error:
|
|
l.ZapLogger.Error("SQL Error",
|
|
zap.Error(err),
|
|
zap.String("sql", sql),
|
|
zap.Int64("rows", rows),
|
|
zap.Duration("elapsed", elapsed),
|
|
zap.String("file", utils.FileWithLineNum()),
|
|
)
|
|
case elapsed > l.SlowThreshold && l.SlowThreshold != 0 && l.LogLevel >= logger.Warn:
|
|
l.ZapLogger.Warn("Slow SQL",
|
|
zap.Duration("elapsed", elapsed),
|
|
zap.String("sql", sql),
|
|
zap.Int64("rows", rows),
|
|
zap.String("file", utils.FileWithLineNum()),
|
|
)
|
|
case l.LogLevel >= logger.Info:
|
|
l.ZapLogger.Info("SQL",
|
|
zap.String("sql", sql),
|
|
zap.Int64("rows", rows),
|
|
zap.Duration("elapsed", elapsed),
|
|
zap.String("file", utils.FileWithLineNum()),
|
|
)
|
|
}
|
|
}
|