sql/gorm: Use zerolog logger

This commit is contained in:
Tom Wiesing 2022-12-02 10:25:59 +01:00
parent 6f1ba24761
commit 7006277409
No known key found for this signature in database
6 changed files with 125 additions and 8 deletions

View file

@ -52,9 +52,13 @@ func (sql *SQL) QueryTable(ctx context.Context, silent bool, table string) (*gor
}
// gorm configuration
config := &gorm.Config{}
config := &gorm.Config{
Logger: newGormLogger(),
}
if silent {
config.Logger = logger.Default.LogMode(logger.Silent)
config.Logger = config.Logger.LogMode(logger.Silent)
} else {
config.Logger = config.Logger.LogMode(logger.Info)
}
// mysql connection

View file

@ -0,0 +1,74 @@
package sql
import (
"context"
"errors"
"time"
"github.com/rs/zerolog"
"gorm.io/gorm/logger"
"gorm.io/gorm/utils"
)
// logger implements "gorm/logger.Interface"
type gormLogger struct {
Level logger.LogLevel
SlowThreshold time.Duration
IgnoreRecordNotFoundError bool
}
func newGormLogger() logger.Interface {
return &gormLogger{
Level: logger.Info,
SlowThreshold: 200 * time.Millisecond,
IgnoreRecordNotFoundError: false,
}
}
func (gl *gormLogger) LogMode(level logger.LogLevel) logger.Interface {
new := *gl
new.Level = level
return &new
}
func (gl *gormLogger) Info(ctx context.Context, format string, v ...interface{}) {
if gl.Level < logger.Info {
return
}
zerolog.Ctx(ctx).Info().Msgf(format, v...)
}
func (gl *gormLogger) Warn(ctx context.Context, format string, v ...interface{}) {
if gl.Level < logger.Warn {
return
}
zerolog.Ctx(ctx).Warn().Msgf(format, v...)
}
func (gl *gormLogger) Error(ctx context.Context, format string, v ...interface{}) {
if gl.Level < logger.Error {
return
}
zerolog.Ctx(ctx).Error().Msgf(format, v...)
}
func (gl *gormLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error) {
if gl.Level < logger.Silent {
return
}
elapsed := time.Since(begin)
switch {
case err != nil && gl.Level >= logger.Error && (!errors.Is(err, logger.ErrRecordNotFound) || !gl.IgnoreRecordNotFoundError):
sql, rows := fc()
src := utils.FileWithLineNum()
zerolog.Ctx(ctx).Err(err).Str("src", src).Int64("rows", rows).Dur("elapsed", elapsed).Str("sql", sql).Msg("GORM")
case elapsed > gl.SlowThreshold && gl.SlowThreshold != 0 && gl.Level >= logger.Warn:
sql, rows := fc()
src := utils.FileWithLineNum()
zerolog.Ctx(ctx).Warn().Str("src", src).Int64("rows", rows).Dur("elapsed", elapsed).Str("sql", sql).Msgf("GORM: Slow SQL >= ", gl.SlowThreshold)
case gl.Level == logger.Info:
sql, rows := fc()
src := utils.FileWithLineNum()
zerolog.Ctx(ctx).Debug().Str("src", src).Int64("rows", rows).Dur("elapsed", elapsed).Str("sql", sql).Msg("GORM")
}
}