sql-migrate icon indicating copy to clipboard operation
sql-migrate copied to clipboard

Feature Proposal: Enhanced Logging for Migrations

Open eklatzer opened this issue 2 months ago • 1 comments

Hey, it would be nice to be able to activate additional logging when applying migrations. Similar requests:

  • https://github.com/rubenv/sql-migrate/pull/40
  • https://github.com/rubenv/sql-migrate/issues/3

I know, there is no common logger interface in Go, but what about defining a minimal one to at least get some details, especially when using sql-migrate as lib. Additionally, this could also be benefiting for the standalone tool, as there could be a new flag (e.g. --verbose).

Small example of the change: (the Logger interface definition is subject of discussion and could for example be extended to info and error or something similar):

type MigrationSet struct {
	Logger Logger
}

var migSet = MigrationSet{}

func SetLogger(l Logger) {
	if l != nil {
		migSet.Logger = l
	}
}

type Logger interface {
	Printf(format string, v ...any)
}

func (ms *MigrationSet) printf(format string, v ...any) {
	if ms.Logger == nil {
		return
	}

	ms.Logger.Printf(format, v...)
}

func Exec(migrations []string) error {
	// execute migrations
	for _, migration := range migrations {
		// apply migration

		// log additional execution info
		migSet.printf("Executing migration: %s\n", migration)
	}

	return nil
}

Please let me know, what you think about this proposal and if we can move on to a PR.

eklatzer avatar Jun 07 '24 06:06 eklatzer