package logging import ( "context" "log/slog" ) type Sink interface { Append(r slog.Record) error Enabled(level slog.Level) bool } type SinkHandler struct { Sink Sink } var _ slog.Handler = &SinkHandler{} func NewSinkHandler(sink Sink) *SinkHandler { return &SinkHandler{ Sink: sink, } } func (h *SinkHandler) Enabled(ctx context.Context, level slog.Level) bool { if h.Sink == nil { return false // disable if no sink } return h.Sink.Enabled(level) } func (h *SinkHandler) Handle(ctx context.Context, r slog.Record) error { newRecord := slog.NewRecord(r.Time, r.Level, r.Message, r.PC) attrs := GetNormalizedAttrs(r) newRecord.AddAttrs(attrs...) return h.Sink.Append(newRecord) } func (h *SinkHandler) WithAttrs(attrs []slog.Attr) slog.Handler { return ChainAttrs(h, attrs) } func (h *SinkHandler) WithGroup(name string) slog.Handler { return ChainGroup(h, name) }