refactor(gorm-logger): 1. add gorm logger in gorm config 2.use faced func in gorm logger
This commit is contained in:
parent
b7009c351e
commit
a70f77464c
|
|
@ -6,6 +6,8 @@ import (
|
|||
"sync"
|
||||
"time"
|
||||
|
||||
"modelRT/logger"
|
||||
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
|
@ -36,7 +38,7 @@ func InitPostgresDBInstance(ctx context.Context, PostgresDBURI string) *gorm.DB
|
|||
func initPostgresDBClient(ctx context.Context, PostgresDBURI string) *gorm.DB {
|
||||
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
|
||||
defer cancel()
|
||||
db, err := gorm.Open(postgres.Open(PostgresDBURI), &gorm.Config{})
|
||||
db, err := gorm.Open(postgres.Open(PostgresDBURI), &gorm.Config{Logger: logger.NewGormLogger()})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,61 @@
|
|||
// 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)
|
||||
}
|
||||
}
|
||||
8
main.go
8
main.go
|
|
@ -17,13 +17,12 @@ import (
|
|||
"modelRT/middleware"
|
||||
"modelRT/pool"
|
||||
|
||||
swaggerFiles "github.com/swaggo/files"
|
||||
ginSwagger "github.com/swaggo/gin-swagger"
|
||||
|
||||
realtimedata "modelRT/real-time-data"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/panjf2000/ants/v2"
|
||||
swaggerFiles "github.com/swaggo/files"
|
||||
ginSwagger "github.com/swaggo/gin-swagger"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
|
|
@ -50,6 +49,9 @@ func main() {
|
|||
flag.Parse()
|
||||
ctx := context.TODO()
|
||||
|
||||
// init logger
|
||||
logger.InitLoggerInstance(modelRTConfig.LoggerConfig)
|
||||
|
||||
modelRTConfig = config.ReadAndInitConfig(*modelRTConfigDir, *modelRTConfigName, *modelRTConfigType)
|
||||
// init postgresDBClient
|
||||
postgresDBClient = database.InitPostgresDBInstance(ctx, modelRTConfig.PostgresDBURI)
|
||||
|
|
|
|||
Loading…
Reference in New Issue