diff --git a/api/api.go b/api/api.go index 037a402..d867bbd 100644 --- a/api/api.go +++ b/api/api.go @@ -17,7 +17,6 @@ import ( "github.com/tigorlazuardi/redmage/pkg/errs" "github.com/tigorlazuardi/redmage/pkg/log" - "github.com/ThreeDotsLabs/watermill" watermillSql "github.com/ThreeDotsLabs/watermill-sql/v3/pkg/sql" "github.com/ThreeDotsLabs/watermill/message" watermillSqlite "github.com/walterwanderley/watermill-sqlite" @@ -52,7 +51,7 @@ type Dependencies struct { const downloadTopic = "subreddit_download" -var watermillLogger = watermill.NewStdLoggerWithOut(os.Stderr, false, false) +var watermillLogger = &log.WatermillLogger{} func New(deps Dependencies) *API { ackDeadline := deps.Config.Duration("download.pubsub.ack.deadline") diff --git a/pkg/log/watermill.go b/pkg/log/watermill.go new file mode 100644 index 0000000..0e2c682 --- /dev/null +++ b/pkg/log/watermill.go @@ -0,0 +1,39 @@ +package log + +import ( + "context" + "log/slog" + + "github.com/ThreeDotsLabs/watermill" +) + +type WatermillLogger struct { + with []any +} + +func (wa *WatermillLogger) Error(msg string, err error, fields watermill.LogFields) { + New(context.Background()).With(wa.with...).With(intoAttrs(fields)...).Err(err).Error(msg) +} + +func (wa *WatermillLogger) Info(msg string, fields watermill.LogFields) { + New(context.Background()).With(wa.with...).With(intoAttrs(fields)...).Info(msg) +} + +func (wa *WatermillLogger) Debug(msg string, fields watermill.LogFields) { + New(context.Background()).With(wa.with...).With(intoAttrs(fields)...).Debug(msg) +} + +func (wa *WatermillLogger) Trace(msg string, fields watermill.LogFields) { + New(context.Background()).With(wa.with...).With(intoAttrs(fields)...).Debug(msg) +} + +func (wa *WatermillLogger) With(fields watermill.LogFields) watermill.LoggerAdapter { + return &WatermillLogger{with: append(wa.with, intoAttrs(fields)...)} +} + +func intoAttrs(fields watermill.LogFields) (attrs []any) { + for k, v := range fields { + attrs = append(attrs, slog.Any(k, v)) + } + return attrs +}