1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2026-06-03 18:35:08 +02:00

log: Add ValueFromAttribute and KeyValueFromAttribute (#6180)

Fixes https://github.com/open-telemetry/opentelemetry-go/issues/6158

Related spec PR:
https://github.com/open-telemetry/opentelemetry-specification/pull/4373

Benchmark results:

```
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/log
cpu: 13th Gen Intel(R) Core(TM) i7-13800H
BenchmarkKeyValueFromAttribute/Empty-20              72029505                16.47 ns/op            0 B/op          0 allocs/op
BenchmarkKeyValueFromAttribute/Bool-20               68560222                16.99 ns/op            0 B/op          0 allocs/op
BenchmarkKeyValueFromAttribute/BoolSlice-20          14647401                76.21 ns/op           50 B/op          2 allocs/op
BenchmarkKeyValueFromAttribute/Int64-20              70737378                16.92 ns/op            0 B/op          0 allocs/op
BenchmarkKeyValueFromAttribute/Int64Slice-20         16780069                96.87 ns/op           64 B/op          2 allocs/op
BenchmarkKeyValueFromAttribute/Float64-20            59299638                16.93 ns/op            0 B/op          0 allocs/op
BenchmarkKeyValueFromAttribute/Float64Slice-20       12691222               106.2 ns/op            64 B/op          2 allocs/op
BenchmarkKeyValueFromAttribute/String-20             63837711                16.97 ns/op            0 B/op          0 allocs/op
BenchmarkKeyValueFromAttribute/StringSlice-20         9251001               114.7 ns/op            80 B/op          2 allocs/op
PASS
ok      go.opentelemetry.io/otel/log    14.776s
```
This commit is contained in:
Robert Pająk
2025-01-22 08:26:46 +01:00
committed by GitHub
parent 538e869ab5
commit d7ebb7aa85
4 changed files with 238 additions and 0 deletions
+53
View File
@@ -6,6 +6,7 @@ package log_test
import (
"testing"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/log"
)
@@ -232,3 +233,55 @@ func BenchmarkValueEqual(b *testing.B) {
}
}
}
func BenchmarkKeyValueFromAttribute(b *testing.B) {
testCases := []struct {
desc string
kv attribute.KeyValue
}{
{
desc: "Empty",
kv: attribute.KeyValue{},
},
{
desc: "Bool",
kv: attribute.Bool("k", true),
},
{
desc: "BoolSlice",
kv: attribute.BoolSlice("k", []bool{true, false}),
},
{
desc: "Int64",
kv: attribute.Int64("k", 13),
},
{
desc: "Int64Slice",
kv: attribute.Int64Slice("k", []int64{12, 34}),
},
{
desc: "Float64",
kv: attribute.Float64("k", 3.14),
},
{
desc: "Float64Slice",
kv: attribute.Float64Slice("k", []float64{3.14, 2.72}),
},
{
desc: "String",
kv: attribute.String("k", "foo"),
},
{
desc: "StringSlice",
kv: attribute.StringSlice("k", []string{"foo", "bar"}),
},
}
for _, tc := range testCases {
b.Run(tc.desc, func(b *testing.B) {
b.ReportAllocs()
for range b.N {
outKV = log.KeyValueFromAttribute(tc.kv)
}
})
}
}