From f0d9fc165a4e4483f3f1dbb8bd85e3d890bd71e8 Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Fri, 28 Nov 2025 10:30:11 +0100 Subject: [PATCH] chore: only call handle on inner handler if enabled --- pkg/util/log/slog/handlers/multi.go | 6 ++++-- pkg/util/log/slog/handlers/multi_test.go | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/pkg/util/log/slog/handlers/multi.go b/pkg/util/log/slog/handlers/multi.go index 9e6e6740673705..e2e6bf79a04004 100644 --- a/pkg/util/log/slog/handlers/multi.go +++ b/pkg/util/log/slog/handlers/multi.go @@ -32,8 +32,10 @@ func NewMulti(handlers ...slog.Handler) slog.Handler { func (h *multi) Handle(ctx context.Context, r slog.Record) error { var errs []error for _, handler := range h.handlers { - if err := handler.Handle(ctx, r); err != nil { - errs = append(errs, err) + if handler.Enabled(ctx, r.Level) { + if err := handler.Handle(ctx, r); err != nil { + errs = append(errs, err) + } } } return errors.Join(errs...) diff --git a/pkg/util/log/slog/handlers/multi_test.go b/pkg/util/log/slog/handlers/multi_test.go index 0f86bb5c725b9c..09a832835d00a9 100644 --- a/pkg/util/log/slog/handlers/multi_test.go +++ b/pkg/util/log/slog/handlers/multi_test.go @@ -223,3 +223,25 @@ func TestMultiHandlerChaining(t *testing.T) { err := handler.Handle(context.Background(), record) assert.NoError(t, err) } + +func TestMultiHandlerOnlyCallsEnabledHandlers(t *testing.T) { + inner1 := newMockInnerHandler() + inner1.enabled = true + inner2 := newMockInnerHandler() + inner2.enabled = false + inner3 := newMockInnerHandler() + inner3.enabled = true + + handler := NewMulti(inner1, inner2, inner3) + + record := slog.NewRecord(time.Now(), slog.LevelInfo, "test message", 0) + err := handler.Handle(context.Background(), record) + + // Should not return error + assert.NoError(t, err) + + // Only enabled handlers should have Handle called + assert.Equal(t, 1, inner1.recordCount()) + assert.Equal(t, 0, inner2.recordCount()) + assert.Equal(t, 1, inner3.recordCount()) +}