feat: add logging
This commit is contained in:
71
internal/pkg/logging/gormlogrus/gormlogrus.go
Normal file
71
internal/pkg/logging/gormlogrus/gormlogrus.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package gormlogrus
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
|
||||
"gorm.io/gorm"
|
||||
gormlogger "gorm.io/gorm/logger"
|
||||
"gorm.io/gorm/utils"
|
||||
)
|
||||
|
||||
type GormLogrusAdapter struct {
|
||||
SlowThreshold time.Duration
|
||||
SourceField string
|
||||
SkipErrRecordNotFound bool
|
||||
Logger logrus.FieldLogger
|
||||
}
|
||||
|
||||
func New(logger logrus.FieldLogger) *GormLogrusAdapter {
|
||||
return &GormLogrusAdapter{
|
||||
Logger: logger,
|
||||
SkipErrRecordNotFound: false,
|
||||
SourceField: "gorm",
|
||||
SlowThreshold: 1 * time.Second,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *GormLogrusAdapter) LogMode(gormlogger.LogLevel) gormlogger.Interface {
|
||||
return l
|
||||
}
|
||||
|
||||
func (l *GormLogrusAdapter) Info(ctx context.Context, s string, args ...interface{}) {
|
||||
l.Logger.Infof(s, args)
|
||||
}
|
||||
|
||||
func (l *GormLogrusAdapter) Warn(ctx context.Context, s string, args ...interface{}) {
|
||||
logrus.Warnf(s, args)
|
||||
}
|
||||
|
||||
func (l *GormLogrusAdapter) Error(ctx context.Context, s string, args ...interface{}) {
|
||||
logrus.Errorf(s, args)
|
||||
}
|
||||
|
||||
func (l *GormLogrusAdapter) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {
|
||||
elapsed := time.Since(begin)
|
||||
sql, rowsAffectedNum := fc()
|
||||
fields := logrus.Fields{}
|
||||
if l.SourceField != "" {
|
||||
fields[l.SourceField] = utils.FileWithLineNum()
|
||||
}
|
||||
|
||||
// format := "%s [cost: %s] [rows: %d]"
|
||||
// args := []interface{}{sql, elapsed, rowsAffectedNum}
|
||||
msg := fmt.Sprintf("%s [cost: %s] [rows: %d]", sql, elapsed, rowsAffectedNum)
|
||||
if err != nil && !(errors.Is(err, gorm.ErrRecordNotFound) && l.SkipErrRecordNotFound) {
|
||||
fields[logrus.ErrorKey] = err
|
||||
l.Logger.WithFields(fields).Error(msg)
|
||||
return
|
||||
}
|
||||
|
||||
if l.SlowThreshold != 0 && elapsed > l.SlowThreshold {
|
||||
l.Logger.WithFields(fields).Warn(msg)
|
||||
return
|
||||
}
|
||||
|
||||
l.Logger.WithFields(fields).Debug(msg)
|
||||
}
|
Reference in New Issue
Block a user