package database import ( "strings" "testing" "go.uber.org/zap" "go.uber.org/zap/zaptest/observer" "gorm.io/driver/sqlite" "gorm.io/gorm" ) func TestGormLoggerDoesNotLogQueryParameters(t *testing.T) { core, observed := observer.New(zap.DebugLevel) logger := zap.New(core) db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{ Logger: newGormLogger("debug", logger), }) if err != nil { t.Fatal(err) } type secretRecord struct { ID uint64 Phone string } if err := db.AutoMigrate(&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 "" }