From 2e87b46228e5fe518047755da2ad522618d05d7e Mon Sep 17 00:00:00 2001 From: Daniel Beneker Date: Mon, 3 Nov 2025 14:09:05 +0100 Subject: [PATCH 1/3] log/slog: add Record.AttrsIter --- src/log/slog/record.go | 8 ++++++++ src/log/slog/record_test.go | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/log/slog/record.go b/src/log/slog/record.go index 3b4e68ce766f5f..d7a3b54fed3b84 100644 --- a/src/log/slog/record.go +++ b/src/log/slog/record.go @@ -5,6 +5,7 @@ package slog import ( + "iter" "runtime" "slices" "time" @@ -92,6 +93,13 @@ func (r Record) Attrs(f func(Attr) bool) { } } +// AttrsIter returns an iterator over every attribute in the [Record]. +func (r Record) AttrsIter() iter.Seq[Attr] { + return func(yield func(Attr) bool) { + r.Attrs(yield) + } +} + // AddAttrs appends the given Attrs to the [Record]'s list of Attrs. // It omits empty groups. func (r *Record) AddAttrs(attrs ...Attr) { diff --git a/src/log/slog/record_test.go b/src/log/slog/record_test.go index 939dc34ac8557d..a81477f59cb571 100644 --- a/src/log/slog/record_test.go +++ b/src/log/slog/record_test.go @@ -36,6 +36,22 @@ func TestRecordAttrs(t *testing.T) { t.Errorf("got %v, want %v", got, want) } } + + // Early return with iterator. + // Hit both loops in Record.Attrs: front and back. + for _, stop := range []int{2, 6} { + var got []Attr + for a := range r.AttrsIter() { + got = append(got, a) + if len(got) < stop { + break + } + } + want := as[:stop] + if !attrsEqual(got, want) { + t.Errorf("got %v, want %v", got, want) + } + } } func TestRecordSource(t *testing.T) { From 84ac8191f134bc250f7fdc2002cd2d0095346ac3 Mon Sep 17 00:00:00 2001 From: Daniel Beneker Date: Mon, 3 Nov 2025 15:50:29 +0100 Subject: [PATCH 2/3] change method name --- src/log/slog/record.go | 4 ++-- src/log/slog/record_test.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/log/slog/record.go b/src/log/slog/record.go index d7a3b54fed3b84..dd724fb3b1f001 100644 --- a/src/log/slog/record.go +++ b/src/log/slog/record.go @@ -93,8 +93,8 @@ func (r Record) Attrs(f func(Attr) bool) { } } -// AttrsIter returns an iterator over every attribute in the [Record]. -func (r Record) AttrsIter() iter.Seq[Attr] { +// AllAttrs returns an iterator over every attribute in the [Record]. +func (r Record) AllAttrs() iter.Seq[Attr] { return func(yield func(Attr) bool) { r.Attrs(yield) } diff --git a/src/log/slog/record_test.go b/src/log/slog/record_test.go index a81477f59cb571..087a6504c1d7dc 100644 --- a/src/log/slog/record_test.go +++ b/src/log/slog/record_test.go @@ -41,7 +41,7 @@ func TestRecordAttrs(t *testing.T) { // Hit both loops in Record.Attrs: front and back. for _, stop := range []int{2, 6} { var got []Attr - for a := range r.AttrsIter() { + for a := range r.AllAttrs() { got = append(got, a) if len(got) < stop { break From c37e118cd26df69c16a7555f86230ce36f11ec80 Mon Sep 17 00:00:00 2001 From: Daniel Beneker Date: Mon, 3 Nov 2025 15:59:12 +0100 Subject: [PATCH 3/3] just return r.Attrs --- src/log/slog/record.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/log/slog/record.go b/src/log/slog/record.go index dd724fb3b1f001..cae440dcfab39d 100644 --- a/src/log/slog/record.go +++ b/src/log/slog/record.go @@ -95,9 +95,7 @@ func (r Record) Attrs(f func(Attr) bool) { // AllAttrs returns an iterator over every attribute in the [Record]. func (r Record) AllAttrs() iter.Seq[Attr] { - return func(yield func(Attr) bool) { - r.Attrs(yield) - } + return r.Attrs } // AddAttrs appends the given Attrs to the [Record]'s list of Attrs.