From ae3e45bf4d230fa7badf9c3b128da1fbb4166eac Mon Sep 17 00:00:00 2001 From: Samuel Berthe Date: Fri, 3 Jan 2025 17:23:09 +0100 Subject: [PATCH] feat: faster attribute processing --- attributes.go | 22 +++------------------- attributes_test.go | 2 +- 2 files changed, 4 insertions(+), 20 deletions(-) diff --git a/attributes.go b/attributes.go index d59e4f4..1f7b019 100644 --- a/attributes.go +++ b/attributes.go @@ -8,7 +8,6 @@ import ( "reflect" "runtime" "slices" - "strconv" "strings" "github.com/samber/lo" @@ -20,9 +19,8 @@ func AppendRecordAttrsToAttrs(attrs []slog.Attr, groups []string, record *slog.R output := make([]slog.Attr, 0, len(attrs)+record.NumAttrs()) output = append(output, attrs...) - slices.Reverse(groups) record.Attrs(func(attr slog.Attr) bool { - for i := range groups { + for i := len(groups) - 1; i >= 0; i-- { attr = slog.Group(groups[i], attr) } output = append(output, attr) @@ -146,24 +144,10 @@ func AttrsToString(attrs ...slog.Attr) map[string]string { func ValueToString(v slog.Value) string { switch v.Kind() { - case slog.KindAny: - return AnyValueToString(v) - case slog.KindLogValuer: + case slog.KindAny, slog.KindLogValuer, slog.KindGroup: return AnyValueToString(v) - case slog.KindGroup: - return AnyValueToString(v) - case slog.KindInt64: - return fmt.Sprintf("%d", v.Int64()) - case slog.KindUint64: - return fmt.Sprintf("%d", v.Uint64()) - case slog.KindFloat64: - return fmt.Sprintf("%f", v.Float64()) - case slog.KindString: + case slog.KindInt64, slog.KindUint64, slog.KindFloat64, slog.KindString, slog.KindBool, slog.KindDuration: return v.String() - case slog.KindBool: - return strconv.FormatBool(v.Bool()) - case slog.KindDuration: - return v.Duration().String() case slog.KindTime: return v.Time().UTC().String() default: diff --git a/attributes_test.go b/attributes_test.go index 4ff4609..c41a9e2 100644 --- a/attributes_test.go +++ b/attributes_test.go @@ -523,7 +523,7 @@ func TestValueToString(t *testing.T) { }, "KindFloat64": { input: slog.Float64("key", 3.14), - expected: "3.140000", + expected: "3.14", }, "KindString": { input: slog.String("key", "test"),