62 lines
1.8 KiB
Go
62 lines
1.8 KiB
Go
// Package logger define log struct of modelRT project
|
|
package logger
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
gormLogger "gorm.io/gorm/logger"
|
|
)
|
|
|
|
// GormLogger define struct for implementing gormLogger.Interface
|
|
type GormLogger struct {
|
|
SlowThreshold time.Duration
|
|
}
|
|
|
|
// NewGormLogger define func for init GormLogger
|
|
func NewGormLogger() *GormLogger {
|
|
return &GormLogger{
|
|
SlowThreshold: 500 * time.Millisecond,
|
|
}
|
|
}
|
|
|
|
// LogMode define func for implementing gormLogger.Interface
|
|
func (l *GormLogger) LogMode(_ gormLogger.LogLevel) gormLogger.Interface {
|
|
return &GormLogger{}
|
|
}
|
|
|
|
// Info define func for implementing gormLogger.Interface
|
|
func (l *GormLogger) Info(ctx context.Context, msg string, data ...any) {
|
|
Info(ctx, msg, "data", data)
|
|
}
|
|
|
|
// Warn define func for implementing gormLogger.Interface
|
|
func (l *GormLogger) Warn(ctx context.Context, msg string, data ...any) {
|
|
Warn(ctx, msg, "data", data)
|
|
}
|
|
|
|
// Error define func for implementing gormLogger.Interface
|
|
func (l *GormLogger) Error(ctx context.Context, msg string, data ...any) {
|
|
Error(ctx, msg, "data", data)
|
|
}
|
|
|
|
// Trace define func for implementing gormLogger.Interface
|
|
func (l *GormLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error) {
|
|
// get SQL running time
|
|
duration := time.Since(begin).Milliseconds()
|
|
// get gorm exec sql and rows affected
|
|
sql, rows := fc()
|
|
// gorm error judgment
|
|
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
Error(ctx, "SQL ERROR", "sql", sql, "rows", rows, "dur(ms)", duration)
|
|
}
|
|
// slow query judgment
|
|
if duration > l.SlowThreshold.Milliseconds() {
|
|
Warn(ctx, "SQL SLOW", "sql", sql, "rows", rows, "dur(ms)", duration)
|
|
} else {
|
|
Debug(ctx, "SQL DEBUG", "sql", sql, "rows", rows, "dur(ms)", duration)
|
|
}
|
|
}
|