1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2025-12-01 23:12:29 +02:00
Files
opentelemetry-go/sdk/log/instrumentation.go
Tyler Yahn b335c0795c Encapsulate observability in Logs SDK (#7315)
- [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
```
2025-09-08 07:29:01 -07:00

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
}