From 3e6375e7636708bc392cfe8ff56ecbcf6028f6a5 Mon Sep 17 00:00:00 2001 From: miampf Date: Mon, 22 Jan 2024 14:47:20 +0100 Subject: [PATCH] move LevelHandler to own file --- internal/logger/levelhandler.go | 51 +++++++++++++++++++++++++++++++++ internal/logger/log.go | 45 ----------------------------- 2 files changed, 51 insertions(+), 45 deletions(-) create mode 100644 internal/logger/levelhandler.go diff --git a/internal/logger/levelhandler.go b/internal/logger/levelhandler.go new file mode 100644 index 000000000..fde481afc --- /dev/null +++ b/internal/logger/levelhandler.go @@ -0,0 +1,51 @@ +package logger + +import ( + "log/slog" + "context" +) + +// LevelHandler copied from the official LevelHandler example in the slog package documentation. + +// LevelHandler wraps a Handler with an Enabled method +// that returns false for levels below a minimum. +type LevelHandler struct { + level slog.Leveler + handler slog.Handler +} + +// NewLevelHandler returns a LevelHandler with the given level. +// All methods except Enabled delegate to h. +func NewLevelHandler(level slog.Leveler, h slog.Handler) *LevelHandler { + // Optimization: avoid chains of LevelHandlers. + if lh, ok := h.(*LevelHandler); ok { + h = lh.Handler() + } + return &LevelHandler{level, h} +} + +// Enabled implements Handler.Enabled by reporting whether +// level is at least as large as h's level. +func (h *LevelHandler) Enabled(_ context.Context, level slog.Level) bool { + return level >= h.level.Level() +} + +// Handle implements Handler.Handle. +func (h *LevelHandler) Handle(ctx context.Context, r slog.Record) error { + return h.handler.Handle(ctx, r) +} + +// WithAttrs implements Handler.WithAttrs. +func (h *LevelHandler) WithAttrs(attrs []slog.Attr) slog.Handler { + return NewLevelHandler(h.level, h.handler.WithAttrs(attrs)) +} + +// WithGroup implements Handler.WithGroup. +func (h *LevelHandler) WithGroup(name string) slog.Handler { + return NewLevelHandler(h.level, h.handler.WithGroup(name)) +} + +// Handler returns the Handler wrapped by h. +func (h *LevelHandler) Handler() slog.Handler { + return h.handler +} diff --git a/internal/logger/log.go b/internal/logger/log.go index 5c0b4c255..9ea8d2f28 100644 --- a/internal/logger/log.go +++ b/internal/logger/log.go @@ -109,51 +109,6 @@ func middlewareLogger(l *slog.Logger) logging.Logger { }) } -// LevelHandler copied from the official LevelHandler example in the slog package documentation. - -// LevelHandler wraps a Handler with an Enabled method -// that returns false for levels below a minimum. -type LevelHandler struct { - level slog.Leveler - handler slog.Handler -} - -// NewLevelHandler returns a LevelHandler with the given level. -// All methods except Enabled delegate to h. -func NewLevelHandler(level slog.Leveler, h slog.Handler) *LevelHandler { - // Optimization: avoid chains of LevelHandlers. - if lh, ok := h.(*LevelHandler); ok { - h = lh.Handler() - } - return &LevelHandler{level, h} -} - -// Enabled implements Handler.Enabled by reporting whether -// level is at least as large as h's level. -func (h *LevelHandler) Enabled(_ context.Context, level slog.Level) bool { - return level >= h.level.Level() -} - -// Handle implements Handler.Handle. -func (h *LevelHandler) Handle(ctx context.Context, r slog.Record) error { - return h.handler.Handle(ctx, r) -} - -// WithAttrs implements Handler.WithAttrs. -func (h *LevelHandler) WithAttrs(attrs []slog.Attr) slog.Handler { - return NewLevelHandler(h.level, h.handler.WithAttrs(attrs)) -} - -// WithGroup implements Handler.WithGroup. -func (h *LevelHandler) WithGroup(name string) slog.Handler { - return NewLevelHandler(h.level, h.handler.WithGroup(name)) -} - -// Handler returns the Handler wrapped by h. -func (h *LevelHandler) Handler() slog.Handler { - return h.handler -} - func NewTest(t * testing.T) *slog.Logger { return slog.New(slog.NewTextHandler(testWriter{t: t}, nil)) }