package database import ( "strings" "testing" "go.uber.org/zap" "go.uber.org/zap/zaptest/observer" "gorm.io/gorm" ) func TestGormLoggerDoesNotLogQueryParameters(t *testing.T) { core, observed := observer.New(zap.DebugLevel) logger := zap.New(core) // 复用 MySQL 测试库,只替换 logger 以观察日志脱敏行为。 db := NewTestDB().Session(&gorm.Session{Logger: newGormLogger("debug", logger)}) type secretRecord struct { ID uint64 Phone string } if err := AutoMigrateIfMissing(db, &secretRecord{}); err != nil { t.Fatal(err) } const secretPhone = "13812345678" if err := db.Create(&secretRecord{Phone: secretPhone}).Error; err != nil { t.Fatal(err) } for _, entry := range observed.All() { for _, value := range entry.ContextMap() { if strings.Contains(valueString(value), secretPhone) { t.Fatalf("query parameter leaked into log: %v", entry.ContextMap()) } } } } func valueString(value any) string { if text, ok := value.(string); ok { return text } return "" }