71 lines
1.5 KiB
Go
71 lines
1.5 KiB
Go
package db
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/rs/zerolog"
|
|
"gorm.io/gorm/logger"
|
|
)
|
|
|
|
var durationUnits = map[time.Duration]string{
|
|
time.Nanosecond: "elapsed_ns",
|
|
time.Microsecond: "elapsed_us",
|
|
time.Millisecond: "elapsed_ms",
|
|
time.Second: "elapsed",
|
|
time.Minute: "elapsed_min",
|
|
time.Hour: "elapsed_hr",
|
|
}
|
|
|
|
type Logger struct{}
|
|
|
|
func (l Logger) LogMode(logger.LogLevel) logger.Interface {
|
|
return l
|
|
}
|
|
|
|
func (l Logger) Error(ctx context.Context, msg string, opts ...interface{}) {
|
|
zerolog.Ctx(ctx).Error().Msg(fmt.Sprintf(msg, opts...))
|
|
}
|
|
|
|
func (l Logger) Warn(ctx context.Context, msg string, opts ...interface{}) {
|
|
zerolog.Ctx(ctx).Warn().Msg(fmt.Sprintf(msg, opts...))
|
|
}
|
|
|
|
func (l Logger) Info(ctx context.Context, msg string, opts ...interface{}) {
|
|
zerolog.Ctx(ctx).Info().Msg(fmt.Sprintf(msg, opts...))
|
|
}
|
|
|
|
func (l Logger) Trace(ctx context.Context, begin time.Time, f func() (string, int64), err error) {
|
|
zl := zerolog.Ctx(ctx)
|
|
var event *zerolog.Event
|
|
|
|
if err != nil {
|
|
event = zl.Debug()
|
|
} else {
|
|
event = zl.Trace()
|
|
}
|
|
|
|
durationKey, found := durationUnits[zerolog.DurationFieldUnit]
|
|
if !found {
|
|
zl.Error().
|
|
Dur("zerolog.DurationFieldUnit", zerolog.DurationFieldUnit).
|
|
Msg("unknown value for zerolog.DurationFieldUnit")
|
|
durationKey = "elapsed_"
|
|
}
|
|
|
|
event.Dur(durationKey, time.Since(begin))
|
|
|
|
sql, rows := f()
|
|
if sql != "" {
|
|
event.Str("sql", sql)
|
|
}
|
|
if rows > -1 {
|
|
event.Int64("rows", rows)
|
|
}
|
|
|
|
event.Send()
|
|
|
|
return
|
|
}
|