rubenv / sql-migrate

SQL schema migration tool for Go.
MIT License
3.16k stars 269 forks source link

Feature Proposal: Enhanced Logging for Migrations #266

Open eklatzer opened 1 month ago

eklatzer commented 1 month ago

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

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 commented 1 month ago

@rubenv Do you already have an info for me regarding this proposal?