| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package database
- import (
- "context"
- "time"
- "go.uber.org/zap"
- "gorm.io/gorm/logger"
- )
- type GormZapLogger struct {
- zap *zap.SugaredLogger
- level logger.LogLevel
- slowThreshold time.Duration
- }
- func NewGormZapLogger(zapLogger *zap.SugaredLogger, level logger.LogLevel) logger.Interface {
- return &GormZapLogger{
- zap: zapLogger,
- level: level,
- slowThreshold: 200 * time.Millisecond,
- }
- }
- func (l *GormZapLogger) LogMode(level logger.LogLevel) logger.Interface {
- l.level = level
- return l
- }
- func (l *GormZapLogger) Info(ctx context.Context, msg string, data ...interface{}) {
- if l.level >= logger.Info {
- l.zap.Infof(msg, data...)
- }
- }
- func (l *GormZapLogger) Warn(ctx context.Context, msg string, data ...interface{}) {
- if l.level >= logger.Warn {
- l.zap.Warnf(msg, data...)
- }
- }
- func (l *GormZapLogger) Error(ctx context.Context, msg string, data ...interface{}) {
- if l.level >= logger.Error {
- l.zap.Errorf(msg, data...)
- }
- }
- func (l *GormZapLogger) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {
- elapsed := time.Since(begin)
- sql, rows := fc()
- switch {
- case err != nil && l.level >= logger.Error:
- l.zap.Errorf("[GORM] err=%v duration=%v rows=%v sql=%s", err, elapsed, rows, sql)
- case elapsed > l.slowThreshold && l.level >= logger.Warn:
- l.zap.Warnf("[GORM] slow sql duration=%v rows=%v sql=%s", elapsed, rows, sql)
- case l.level >= logger.Info:
- l.zap.Infof("[GORM] duration=%v rows=%v sql=%s", elapsed, rows, sql)
- }
- }
|