fix: 完成商务迁移复核与接口优化并清理历史资料

This commit is contained in:
Yvan
2026-11-04 14:45:02 +08:00
parent 5a96be6a79
commit 297e80827d
176 changed files with 6803 additions and 6002 deletions
+19 -3
View File
@@ -91,15 +91,31 @@ func (g *Logger) Trace(ctx context.Context, begin time.Time, query func() (strin
return
}
elapsed := time.Since(begin)
logError := queryErr != nil && g.level >= logger.Error && !errors.Is(queryErr, logger.ErrRecordNotFound)
logSlow := elapsed > g.slowThreshold && g.level >= logger.Warn
logInfo := g.level >= logger.Info
if !logError && !logSlow && !logInfo {
// query 会展开全部 SQL 参数;未启用的日志不应承担大 IN 查询的格式化成本。
return
}
level := slog.LevelInfo
if logError {
level = slog.LevelError
} else if logSlow {
level = slog.LevelWarn
}
if !g.logger.Enabled(ctx, level) {
return
}
sql, rows := query()
fields := []any{"mod", "sql", "gorm_logger", true, "sql", sql, "rows", rows, "elapsed_ms", elapsed.Milliseconds()}
switch {
case queryErr != nil && g.level >= logger.Error && !errors.Is(queryErr, logger.ErrRecordNotFound):
case logError:
fields = append(fields, "error", queryErr)
g.logger.ErrorContext(ctx, "SQL 执行错误", fields...)
case elapsed > g.slowThreshold && g.level >= logger.Warn:
case logSlow:
g.logger.WarnContext(ctx, "SQL 慢查询", fields...)
case g.level >= logger.Info:
case logInfo:
g.logger.InfoContext(ctx, "SQL", fields...)
}
}
+45
View File
@@ -0,0 +1,45 @@
package gormkit
import (
"bytes"
"context"
"errors"
"log/slog"
"testing"
"time"
"gorm.io/gorm/logger"
)
func TestTraceOnlyFormatsQueriesThatWillBeLogged(t *testing.T) {
for _, tc := range []struct {
name string
gorm logger.LogLevel
app slog.Level
duration time.Duration
err error
want bool
}{
{"silent", logger.Silent, slog.LevelInfo, time.Second, errors.New("failure"), false},
{"successful error-only", logger.Error, slog.LevelInfo, time.Second, nil, false},
{"fast warning-only", logger.Warn, slog.LevelInfo, time.Millisecond, nil, false},
{"not-found warning-only", logger.Warn, slog.LevelInfo, time.Millisecond, logger.ErrRecordNotFound, false},
{"application filter", logger.Info, slog.LevelError, time.Millisecond, nil, false},
{"slow", logger.Warn, slog.LevelInfo, time.Second, nil, true},
{"error", logger.Error, slog.LevelInfo, time.Millisecond, errors.New("failure"), true},
{"info", logger.Info, slog.LevelInfo, time.Millisecond, nil, true},
} {
t.Run(tc.name, func(t *testing.T) {
var buffer bytes.Buffer
log := NewLogger(slog.New(slog.NewJSONHandler(&buffer, &slog.HandlerOptions{Level: tc.app})), tc.gorm)
calls := 0
log.Trace(context.Background(), time.Now().Add(-tc.duration), func() (string, int64) {
calls++
return "SELECT 1", 1
}, tc.err)
if (calls == 1) != tc.want || (buffer.Len() > 0) != tc.want {
t.Fatalf("format calls=%d, output=%q, want logging=%v", calls, buffer.String(), tc.want)
}
})
}
}