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) {}