Update: (#1758)
1.config gorm相关移除DBBASE实现改为GeneralDB实现LogLevel函数 2.移除initializel/internal/logger实现,改为gorm_logger_writer实现gorm的logger通过zap输出到文件或者控制台 3.优化initializel/internal/gorm代码 Co-authored-by: SliverHorn <caiwei.lai@jutze.com.cn>
This commit is contained in:
@@ -1,16 +1,16 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"github.com/flipped-aurora/gin-vue-admin/server/config"
|
||||
"github.com/flipped-aurora/gin-vue-admin/server/global"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
"gorm.io/gorm/schema"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
type DBBASE interface {
|
||||
GetLogMode() string
|
||||
}
|
||||
|
||||
var Gorm = new(_gorm)
|
||||
|
||||
type _gorm struct{}
|
||||
@@ -18,37 +18,31 @@ type _gorm struct{}
|
||||
// Config gorm 自定义配置
|
||||
// Author [SliverHorn](https://github.com/SliverHorn)
|
||||
func (g *_gorm) Config(prefix string, singular bool) *gorm.Config {
|
||||
config := &gorm.Config{
|
||||
var general config.GeneralDB
|
||||
switch global.GVA_CONFIG.System.DbType {
|
||||
case "mysql":
|
||||
general = global.GVA_CONFIG.Mysql.GeneralDB
|
||||
case "pgsql":
|
||||
general = global.GVA_CONFIG.Pgsql.GeneralDB
|
||||
case "oracle":
|
||||
general = global.GVA_CONFIG.Oracle.GeneralDB
|
||||
case "sqlite":
|
||||
general = global.GVA_CONFIG.Sqlite.GeneralDB
|
||||
case "mssql":
|
||||
general = global.GVA_CONFIG.Mssql.GeneralDB
|
||||
default:
|
||||
general = global.GVA_CONFIG.Mysql.GeneralDB
|
||||
}
|
||||
return &gorm.Config{
|
||||
Logger: logger.New(NewWriter(general, log.New(os.Stdout, "\r\n", log.LstdFlags)), logger.Config{
|
||||
SlowThreshold: 200 * time.Millisecond,
|
||||
LogLevel: general.LogLevel(),
|
||||
Colorful: true,
|
||||
}),
|
||||
NamingStrategy: schema.NamingStrategy{
|
||||
TablePrefix: prefix,
|
||||
SingularTable: singular,
|
||||
},
|
||||
DisableForeignKeyConstraintWhenMigrating: true,
|
||||
}
|
||||
_default := NewZapLogger()
|
||||
var logMode DBBASE
|
||||
switch global.GVA_CONFIG.System.DbType {
|
||||
case "mysql":
|
||||
logMode = &global.GVA_CONFIG.Mysql
|
||||
case "pgsql":
|
||||
logMode = &global.GVA_CONFIG.Pgsql
|
||||
case "oracle":
|
||||
logMode = &global.GVA_CONFIG.Oracle
|
||||
default:
|
||||
logMode = &global.GVA_CONFIG.Mysql
|
||||
}
|
||||
|
||||
switch logMode.GetLogMode() {
|
||||
case "silent", "Silent":
|
||||
config.Logger = _default.LogMode(logger.Silent)
|
||||
case "error", "Error":
|
||||
config.Logger = _default.LogMode(logger.Error)
|
||||
case "warn", "Warn":
|
||||
config.Logger = _default.LogMode(logger.Warn)
|
||||
case "info", "Info":
|
||||
config.Logger = _default.LogMode(logger.Info)
|
||||
default:
|
||||
config.Logger = _default.LogMode(logger.Info)
|
||||
}
|
||||
return config
|
||||
}
|
||||
|
37
server/initialize/internal/gorm_logger_writer.go
Normal file
37
server/initialize/internal/gorm_logger_writer.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/flipped-aurora/gin-vue-admin/server/config"
|
||||
"go.uber.org/zap"
|
||||
"gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
type Writer struct {
|
||||
config config.GeneralDB
|
||||
writer logger.Writer
|
||||
}
|
||||
|
||||
func NewWriter(config config.GeneralDB, writer logger.Writer) *Writer {
|
||||
return &Writer{config: config, writer: writer}
|
||||
}
|
||||
|
||||
// Printf 格式化打印日志
|
||||
func (c *Writer) Printf(message string, data ...any) {
|
||||
if c.config.LogZap {
|
||||
switch c.config.LogLevel() {
|
||||
case logger.Silent:
|
||||
zap.L().Debug(fmt.Sprintf(message, data...))
|
||||
case logger.Error:
|
||||
zap.L().Error(fmt.Sprintf(message, data...))
|
||||
case logger.Warn:
|
||||
zap.L().Warn(fmt.Sprintf(message, data...))
|
||||
case logger.Info:
|
||||
zap.L().Info(fmt.Sprintf(message, data...))
|
||||
default:
|
||||
zap.L().Info(fmt.Sprintf(message, data...))
|
||||
}
|
||||
return
|
||||
}
|
||||
c.writer.Printf(message, data...)
|
||||
}
|
@@ -1,66 +0,0 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/flipped-aurora/gin-vue-admin/server/global"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
"gorm.io/gorm/logger"
|
||||
"time"
|
||||
)
|
||||
|
||||
type ZapLogger struct {
|
||||
log *zap.Logger
|
||||
}
|
||||
|
||||
func NewZapLogger() logger.Interface {
|
||||
newLogger := global.GVA_LOG.With(zap.String("type", "sql"))
|
||||
return &ZapLogger{
|
||||
log: newLogger,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *ZapLogger) LogMode(level logger.LogLevel) logger.Interface {
|
||||
var newLevel zapcore.Level
|
||||
switch level {
|
||||
case logger.Silent:
|
||||
newLevel = zapcore.FatalLevel
|
||||
case logger.Error:
|
||||
newLevel = zapcore.ErrorLevel
|
||||
case logger.Warn:
|
||||
newLevel = zapcore.WarnLevel
|
||||
case logger.Info:
|
||||
newLevel = zapcore.InfoLevel
|
||||
}
|
||||
// 这里为log设置新的level
|
||||
l.log = l.log.WithOptions(zap.IncreaseLevel(newLevel))
|
||||
return l
|
||||
}
|
||||
|
||||
func (l *ZapLogger) Info(ctx context.Context, msg string, data ...interface{}) {
|
||||
l.log.Info(fmt.Sprintf(msg, data...))
|
||||
}
|
||||
|
||||
func (l *ZapLogger) Warn(ctx context.Context, msg string, data ...interface{}) {
|
||||
l.log.Warn(fmt.Sprintf(msg, data...))
|
||||
}
|
||||
|
||||
func (l *ZapLogger) Error(ctx context.Context, msg string, data ...interface{}) {
|
||||
l.log.Error(fmt.Sprintf(msg, data...))
|
||||
}
|
||||
|
||||
func (l *ZapLogger) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {
|
||||
elapsed := time.Since(begin)
|
||||
switch {
|
||||
case err != nil && l.log.Core().Enabled(zap.ErrorLevel):
|
||||
sql, _ := fc()
|
||||
l.log.Error("trace", zap.String("elapsed", elapsed.String()), zap.String("sql", sql), zap.Error(err))
|
||||
case elapsed > 200*time.Millisecond && l.log.Core().Enabled(zap.WarnLevel):
|
||||
sql, _ := fc()
|
||||
l.log.Warn("trace", zap.String("elapsed", elapsed.String()), zap.String("sql", sql))
|
||||
case l.log.Core().Enabled(zap.InfoLevel):
|
||||
sql, _ := fc()
|
||||
l.log.Info("trace", zap.String("elapsed", elapsed.String()), zap.String("sql", sql))
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user