You've already forked opentelemetry-go
mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-12-01 23:12:29 +02:00
- [Follow
guidelines](a5dcd68ebb/CONTRIBUTING.md (encapsulation))
and encapsulate the Observability for the Logs SDK logger by moving it
into a single function.
- Add benchmarks to ensure no performance regressions
### Benchmarks
```console
$ benchstat main_2de26d1de.txt enc-sdk-log-obs_c06e888.txt
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/sdk/log
cpu: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
│ main_2de26d1de.txt │ enc-sdk-log-obs_c06e888.txt │
│ sec/op │ sec/op vs base │
LoggerEmitObservability/Disabled-8 167.8n ± 4% 167.3n ± 5% ~ (p=0.796 n=10)
LoggerEmitObservability/Enabled-8 556.6n ± 4% 556.1n ± 4% ~ (p=0.955 n=10)
geomean 305.6n 305.0n -0.19%
│ main_2de26d1de.txt │ enc-sdk-log-obs_c06e888.txt │
│ B/op │ B/op vs base │
LoggerEmitObservability/Disabled-8 448.0 ± 0% 448.0 ± 0% ~ (p=1.000 n=10) ¹
LoggerEmitObservability/Enabled-8 448.0 ± 0% 448.0 ± 0% ~ (p=1.000 n=10) ¹
geomean 448.0 448.0 +0.00%
¹ all samples are equal
│ main_2de26d1de.txt │ enc-sdk-log-obs_c06e888.txt │
│ allocs/op │ allocs/op vs base │
LoggerEmitObservability/Disabled-8 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹
LoggerEmitObservability/Enabled-8 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹
geomean 1.000 1.000 +0.00%
¹ all samples are equal
```
40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package log // import "go.opentelemetry.io/otel/sdk/log"
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"go.opentelemetry.io/otel"
|
|
"go.opentelemetry.io/otel/metric"
|
|
"go.opentelemetry.io/otel/sdk"
|
|
"go.opentelemetry.io/otel/sdk/log/internal/x"
|
|
semconv "go.opentelemetry.io/otel/semconv/v1.37.0"
|
|
"go.opentelemetry.io/otel/semconv/v1.37.0/otelconv"
|
|
)
|
|
|
|
// newRecordCounterIncr returns a function that increments the log record
|
|
// counter metric. If observability is disabled, it returns nil.
|
|
func newRecordCounterIncr() (func(context.Context), error) {
|
|
if !x.SelfObservability.Enabled() {
|
|
return nil, nil
|
|
}
|
|
|
|
m := otel.GetMeterProvider().Meter(
|
|
"go.opentelemetry.io/otel/sdk/log",
|
|
metric.WithInstrumentationVersion(sdk.Version()),
|
|
metric.WithSchemaURL(semconv.SchemaURL),
|
|
)
|
|
|
|
created, err := otelconv.NewSDKLogCreated(m)
|
|
if err != nil {
|
|
err = fmt.Errorf("failed to create log created metric: %w", err)
|
|
return nil, err
|
|
}
|
|
inst := created.Inst()
|
|
f := func(ctx context.Context) { inst.Add(ctx, 1) }
|
|
return f, nil
|
|
}
|