| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package logger
- import (
- "context"
- "errors"
- log "github.com/sirupsen/logrus"
- "gorm.io/gorm"
- gormLogger "gorm.io/gorm/logger"
- "gorm.io/gorm/utils"
- "time"
- )
- /*
- /internal/pkg/logger
- 该package用于定义和实现日志相关接口
- */
- //ORM接口的实现
- //在所有级别的日志消息中加入默认字段model="gorm"
- //type GORMFieldHook struct {
- //}
- //
- //func NewGORMFieldHook() (*GORMFieldHook) {
- //
- // return &GORMFieldHook{}
- //}
- //
- //func (hook *GORMFieldHook) Fire(entry *log.Entry) error {
- // entry.Data["model"] = "gorm"
- // return nil
- //}
- type gromLogger struct {
- logger *log.Logger
- SlowThreshold time.Duration // 慢 SQL 阈值
- SourceField string
- SkipErrRecordNotFound bool
- }
- func NewGormLogger(logger *log.Logger) *gromLogger {
- return &gromLogger{
- logger: logger,
- SkipErrRecordNotFound: true,
- }
- }
- //实现logger interface中相关接口
- func (l *gromLogger) LogMode(gormLogger.LogLevel) gormLogger.Interface {
- return l
- }
- func (l *gromLogger) Info(ctx context.Context, s string, args ...interface{}) {
- l.logger.WithContext(ctx).Infof(s, args)
- }
- func (l *gromLogger) Warn(ctx context.Context, s string, args ...interface{}) {
- l.logger.WithContext(ctx).Warnf(s, args)
- }
- func (l *gromLogger) Error(ctx context.Context, s string, args ...interface{}) {
- l.logger.WithContext(ctx).Errorf(s, args)
- }
- func (l *gromLogger) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {
- elapsed := time.Since(begin)
- sql, _ := fc()
- fields := log.Fields{}
- if l.SourceField != "" {
- fields[l.SourceField] = utils.FileWithLineNum()
- }
- if err != nil && !(errors.Is(err, gorm.ErrRecordNotFound) && l.SkipErrRecordNotFound) {
- fields[log.ErrorKey] = err
- l.logger.WithContext(ctx).WithFields(fields).Errorf("%s [%s]", sql, elapsed)
- return
- }
- if l.SlowThreshold != 0 && elapsed > l.SlowThreshold {
- l.logger.WithContext(ctx).WithFields(fields).Warnf("%s [%s]", sql, elapsed)
- return
- }
- l.logger.WithContext(ctx).WithFields(fields).Debugf("%s [%s]", sql, elapsed)
- }
|