| | |
| | |
| | |
| |
|
| | package slog_test |
| |
|
| | import ( |
| | "context" |
| | "log/slog" |
| | "os" |
| | ) |
| |
|
| | |
| | |
| | type LevelHandler struct { |
| | level slog.Leveler |
| | handler slog.Handler |
| | } |
| |
|
| | |
| | |
| | func NewLevelHandler(level slog.Leveler, h slog.Handler) *LevelHandler { |
| | |
| | if lh, ok := h.(*LevelHandler); ok { |
| | h = lh.Handler() |
| | } |
| | return &LevelHandler{level, h} |
| | } |
| |
|
| | |
| | |
| | func (h *LevelHandler) Enabled(_ context.Context, level slog.Level) bool { |
| | return level >= h.level.Level() |
| | } |
| |
|
| | |
| | func (h *LevelHandler) Handle(ctx context.Context, r slog.Record) error { |
| | return h.handler.Handle(ctx, r) |
| | } |
| |
|
| | |
| | func (h *LevelHandler) WithAttrs(attrs []slog.Attr) slog.Handler { |
| | return NewLevelHandler(h.level, h.handler.WithAttrs(attrs)) |
| | } |
| |
|
| | |
| | func (h *LevelHandler) WithGroup(name string) slog.Handler { |
| | return NewLevelHandler(h.level, h.handler.WithGroup(name)) |
| | } |
| |
|
| | |
| | func (h *LevelHandler) Handler() slog.Handler { |
| | return h.handler |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | func ExampleHandler_levelHandler() { |
| | removeTime := func(groups []string, a slog.Attr) slog.Attr { |
| | if a.Key == slog.TimeKey && len(groups) == 0 { |
| | return slog.Attr{} |
| | } |
| | return a |
| | } |
| | th := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ReplaceAttr: removeTime}) |
| | logger := slog.New(NewLevelHandler(slog.LevelWarn, th)) |
| | logger.Info("not printed") |
| | logger.Warn("printed") |
| |
|
| | |
| | |
| | } |
| |
|