79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
package logs
|
|
|
|
import (
|
|
c "context"
|
|
"go.uber.org/zap"
|
|
"gorm.io/gorm"
|
|
llog "gorm.io/gorm/logger"
|
|
"gorm.io/gorm/utils"
|
|
"time"
|
|
)
|
|
|
|
const LOG_NAMESPACE = "_gorm"
|
|
|
|
func NewZapLogger() llog.Interface {
|
|
zapLogger, _ := zap.NewProduction()
|
|
return &ZapLogger{
|
|
defaultLogger: zapLogger,
|
|
level: llog.Info,
|
|
}
|
|
}
|
|
|
|
type ZapLogger struct {
|
|
level llog.LogLevel
|
|
defaultLogger *zap.Logger
|
|
IgnoreRecordNotFoundError bool
|
|
}
|
|
|
|
func (z *ZapLogger) LogMode(level llog.LogLevel) llog.Interface {
|
|
newlogger := *z
|
|
newlogger.level = level
|
|
return &newlogger
|
|
}
|
|
|
|
func (l ZapLogger) Info(ctx c.Context, msg string, data ...interface{}) {
|
|
ll := l.defaultLogger
|
|
|
|
ll.Info(msg, zap.Namespace(LOG_NAMESPACE), zap.String("caller", utils.FileWithLineNum()), zap.String("msg", msg), zap.Any("data", data))
|
|
}
|
|
|
|
func (l ZapLogger) Warn(ctx c.Context, msg string, data ...interface{}) {
|
|
ll := l.defaultLogger
|
|
|
|
ll.Warn(msg, zap.Namespace(LOG_NAMESPACE), zap.String("caller", utils.FileWithLineNum()), zap.String("msg", msg), zap.Any("data", data))
|
|
}
|
|
|
|
func (l ZapLogger) Error(ctx c.Context, msg string, data ...interface{}) {
|
|
ll := l.defaultLogger
|
|
|
|
ll.Error(msg, zap.Namespace(LOG_NAMESPACE), zap.String("caller", utils.FileWithLineNum()), zap.String("msg", msg), zap.Any("data", data))
|
|
}
|
|
|
|
func (l ZapLogger) Trace(ctx c.Context, begin time.Time, fc func() (string, int64), err error) {
|
|
elapsed := time.Since(begin)
|
|
sql, rows := fc()
|
|
ll := l.defaultLogger
|
|
|
|
if nil == err {
|
|
if l.level < llog.Info {
|
|
return
|
|
}
|
|
|
|
ll.With(zap.Int64("cost", elapsed.Milliseconds()), zap.String("sql", sql)).
|
|
Info("gorm trace", zap.Namespace(LOG_NAMESPACE),
|
|
zap.String("caller", utils.FileWithLineNum()),
|
|
zap.Int64("rows", rows))
|
|
} else {
|
|
//数据不存在 不需要报错
|
|
if err == gorm.ErrRecordNotFound {
|
|
return
|
|
}
|
|
|
|
ll.With(zap.Int64("cost", elapsed.Milliseconds()), zap.String("sql", sql)).
|
|
Error(err.Error(), zap.Namespace(LOG_NAMESPACE),
|
|
zap.String("caller", utils.FileWithLineNum()),
|
|
zap.Error(err),
|
|
zap.Int64("rows", rows))
|
|
}
|
|
}
|