8
8
"net/http"
9
9
"strings"
10
10
11
+ "github.com/btcsuite/btclog"
11
12
"github.com/golang-migrate/migrate/v4"
12
13
"github.com/golang-migrate/migrate/v4/database"
13
14
"github.com/golang-migrate/migrate/v4/source/httpfs"
33
34
}
34
35
)
35
36
37
+ // migrationLogger is a logger that wraps the passed btclog.Logger so it can be
38
+ // used to log migrations.
39
+ type migrationLogger struct {
40
+ log btclog.Logger
41
+ }
42
+
43
+ // Printf is like fmt.Printf. We map this to the target logger based on the
44
+ // current log level.
45
+ func (m * migrationLogger ) Printf (format string , v ... interface {}) {
46
+ switch m .log .Level () {
47
+ case btclog .LevelTrace :
48
+ m .log .Tracef (format , v ... )
49
+ case btclog .LevelDebug :
50
+ m .log .Debugf (format , v ... )
51
+ case btclog .LevelInfo :
52
+ m .log .Infof (format , v ... )
53
+ case btclog .LevelWarn :
54
+ m .log .Warnf (format , v ... )
55
+ case btclog .LevelError :
56
+ m .log .Errorf (format , v ... )
57
+ case btclog .LevelCritical :
58
+ m .log .Criticalf (format , v ... )
59
+ }
60
+ }
61
+
62
+ // Verbose should return true when verbose logging output is wanted
63
+ func (m * migrationLogger ) Verbose () bool {
64
+ return m .log .Level () <= btclog .LevelDebug
65
+ }
66
+
36
67
// applyMigrations executes database migration files found in the given file
37
68
// system under the given path, using the passed database driver and database
38
69
// name, up to or down to the given target version.
@@ -58,6 +89,9 @@ func applyMigrations(fs fs.FS, driver database.Driver, path, dbName string,
58
89
return err
59
90
}
60
91
92
+ // Apply our local logger to the migration instance.
93
+ sqlMigrate .Log = & migrationLogger {log }
94
+
61
95
// Execute the migration based on the target given.
62
96
err = targetVersion (sqlMigrate )
63
97
if err != nil && ! errors .Is (err , migrate .ErrNoChange ) {
0 commit comments