linstrom/shared/zerologGormAdapter.go
2025-04-14 16:59:59 +02:00

79 lines
2.2 KiB
Go

package shared
import (
"context"
"time"
"github.com/rs/zerolog"
"gorm.io/gorm/logger"
)
type ZerologGormAdapter struct {
logger zerolog.Logger
}
// Compile time interface implementation enforcement
var _ logger.Interface = &ZerologGormAdapter{}
// Not worth testing as just a wrapper for putting into a struct
func NewGormLogger(zerologger zerolog.Logger) *ZerologGormAdapter {
return &ZerologGormAdapter{zerologger}
}
// Not testable since it focuses entirely on the side effect of
// configuring loglevel
func (g *ZerologGormAdapter) LogMode(newLevel logger.LogLevel) logger.Interface {
switch newLevel {
case logger.Error:
g.logger = g.logger.Level(zerolog.ErrorLevel)
case logger.Warn:
g.logger = g.logger.Level(zerolog.WarnLevel)
case logger.Info:
g.logger = g.logger.Level(zerolog.InfoLevel)
case logger.Silent:
g.logger = g.logger.Level(zerolog.Disabled)
}
return g
}
// Not worth testing since only a wrapper around another function call
func (g *ZerologGormAdapter) Info(ctx context.Context, format string, args ...any) {
g.logger.Info().Ctx(ctx).Msgf(format, args...)
}
// Not worth testing since only a wrapper around another function call
func (g *ZerologGormAdapter) Warn(ctx context.Context, format string, args ...any) {
g.logger.Warn().Ctx(ctx).Msgf(format, args...)
}
// Not worth testing since only a wrapper around another function call
func (g *ZerologGormAdapter) Error(ctx context.Context, format string, args ...any) {
g.logger.Error().Ctx(ctx).Msgf(format, args...)
}
// Not worth testing since only a wrapper around another function call
func (g *ZerologGormAdapter) Trace(
ctx context.Context,
begin time.Time,
fc func() (sql string, rowsAffected int64),
err error,
) {
sql, rowsAffected := fc()
g.logger.Trace().
Ctx(ctx).
Time("gorm-begin", begin).
Err(err).
Str("gorm-query", sql).
Int64("gorm-rows-affected", rowsAffected).
Send()
}
// Not worth testing since only a wrapper around another function call
func (g *ZerologGormAdapter) OverwriteLoggingLevel(new zerolog.Level) {
g.logger = g.logger.Level(new)
}
// Not worth testing since only a wrapper around another function call
func (g *ZerologGormAdapter) OverwriteLogger(new zerolog.Logger) {
g.logger = new
}