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"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"modelRT/logger"
|
||||||
|
|
||||||
"gorm.io/driver/postgres"
|
"gorm.io/driver/postgres"
|
||||||
"gorm.io/gorm"
|
"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 {
|
func initPostgresDBClient(ctx context.Context, PostgresDBURI string) *gorm.DB {
|
||||||
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
|
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
|
||||||
defer cancel()
|
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 {
|
if err != nil {
|
||||||
panic(err)
|
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/middleware"
|
||||||
"modelRT/pool"
|
"modelRT/pool"
|
||||||
|
|
||||||
swaggerFiles "github.com/swaggo/files"
|
|
||||||
ginSwagger "github.com/swaggo/gin-swagger"
|
|
||||||
|
|
||||||
realtimedata "modelRT/real-time-data"
|
realtimedata "modelRT/real-time-data"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/panjf2000/ants/v2"
|
"github.com/panjf2000/ants/v2"
|
||||||
|
swaggerFiles "github.com/swaggo/files"
|
||||||
|
ginSwagger "github.com/swaggo/gin-swagger"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -50,6 +49,9 @@ func main() {
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
ctx := context.TODO()
|
ctx := context.TODO()
|
||||||
|
|
||||||
|
// init logger
|
||||||
|
logger.InitLoggerInstance(modelRTConfig.LoggerConfig)
|
||||||
|
|
||||||
modelRTConfig = config.ReadAndInitConfig(*modelRTConfigDir, *modelRTConfigName, *modelRTConfigType)
|
modelRTConfig = config.ReadAndInitConfig(*modelRTConfigDir, *modelRTConfigName, *modelRTConfigType)
|
||||||
// init postgresDBClient
|
// init postgresDBClient
|
||||||
postgresDBClient = database.InitPostgresDBInstance(ctx, modelRTConfig.PostgresDBURI)
|
postgresDBClient = database.InitPostgresDBInstance(ctx, modelRTConfig.PostgresDBURI)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue