From 1630d80c0e2ccbeb5b5a3b92ac80dbdb470becc6 Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Mon, 8 Jun 2020 21:12:00 -0400 Subject: [PATCH] Fix gorm newlines issue (#108) Even if you made a custom formatter for gorm, it would blithely println anything returned, including nils, resulting in lots of new lines when we were ignoring output. This also creates a custom logger that doesn't do anything when newlines are found. --- internal/cmd/base/servers.go | 1 + internal/db/db.go | 18 ++++++++++++++++++ internal/db/read_writer_test.go | 1 + 3 files changed, 20 insertions(+) diff --git a/internal/cmd/base/servers.go b/internal/cmd/base/servers.go index 4417a04c8e..0546d189ac 100644 --- a/internal/cmd/base/servers.go +++ b/internal/cmd/base/servers.go @@ -418,6 +418,7 @@ func (b *Server) CreateDevDatabase(dialect string) error { b.Database = dbase gorm.LogFormatter = db.GetGormLogFormatter(b.Logger) + b.Database.SetLogger(db.GetGormLogger(b.Logger)) b.Database.LogMode(true) rw := db.New(b.Database) diff --git a/internal/db/db.go b/internal/db/db.go index 4244ca4a5b..ef1d62a382 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -182,3 +182,21 @@ func GetGormLogFormatter(log hclog.Logger) func(values ...interface{}) (messages return nil } } + +type gormLogger struct { + logger hclog.Logger +} + +func (g gormLogger) Print(values ...interface{}) { + formatted := gorm.LogFormatter(values...) + if formatted == nil { + return + } + // Our formatter should elide anything we don't want so this should never + // happen, panic if so so we catch/fix + panic("unhandled error case") +} + +func GetGormLogger(log hclog.Logger) gormLogger { + return gormLogger{logger: log} +} diff --git a/internal/db/read_writer_test.go b/internal/db/read_writer_test.go index d4fd24ebfc..a3fa37cbc7 100644 --- a/internal/db/read_writer_test.go +++ b/internal/db/read_writer_test.go @@ -684,6 +684,7 @@ func TestDb_SearchWhere(t *testing.T) { Level: hclog.Trace, }) gorm.LogFormatter = GetGormLogFormatter(log) + db.SetLogger(GetGormLogger(log)) db.LogMode(true) defer func() { assert.True(strings.Contains(buf.String(), "syntax error at or near"))