goose.go
1package log
2
3import (
4 "context"
5 "fmt"
6 "log/slog"
7
8 "github.com/pressly/goose/v3"
9)
10
11// GooseLogger wraps the logger for migrations and redirects it to log/slog with additional optional attributes
12// for context
13func GooseLogger(attrs ...slog.Attr) goose.Logger {
14 return &gooseLogger{attrs}
15}
16
17type gooseLogger struct {
18 attrs []slog.Attr
19}
20
21func (g *gooseLogger) Fatalf(format string, v ...any) {
22 slog.LogAttrs(context.Background(), slog.LevelError, fmt.Sprintf(format, v...), g.attrs...)
23}
24func (g *gooseLogger) Printf(format string, v ...any) {
25 // goose logging is annoying, so set to level TRACE (Level = -9) to disable unless needed for debugging
26 slog.LogAttrs(context.Background(), slog.Level(-9), fmt.Sprintf(format, v...), g.attrs...)
27}
28
29func GooseDiscard() goose.Logger {
30 return &discardLogger{}
31}
32
33type discardLogger struct{}
34
35func (d *discardLogger) Fatalf(format string, v ...any) {}
36func (d *discardLogger) Printf(format string, v ...any) {}