Skip to content

Commit dc71220

Browse files
authored
minsev: Update to use sdk/log.FilterProcessor (#6833)
1 parent 4b3d45d commit dc71220

File tree

6 files changed

+58
-43
lines changed

6 files changed

+58
-43
lines changed

processors/minsev/example_test.go

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright The OpenTelemetry Authors
22
// SPDX-License-Identifier: Apache-2.0
33

4-
package minsev // import "go.opentelemetry.io/contrib/processors/minsev"
4+
package minsev_test
55

66
import (
77
"context"
@@ -10,7 +10,9 @@ import (
1010
"strings"
1111
"sync"
1212

13+
"go.opentelemetry.io/contrib/processors/minsev"
1314
"go.opentelemetry.io/otel/log"
15+
logsdk "go.opentelemetry.io/otel/sdk/log"
1416
)
1517

1618
const key = "OTEL_LOG_LEVEL"
@@ -32,17 +34,28 @@ type EnvSeverity struct{}
3234
func (EnvSeverity) Severity() log.Severity { return getSeverity() }
3335

3436
func ExampleSeveritier() {
35-
// Mock an environment variable setup that would be done externally.
37+
// Mock an environmental variable setup that would be done externally.
3638
_ = os.Setenv(key, "error")
3739

38-
p := NewLogProcessor(&processor{}, EnvSeverity{})
40+
// Existing processor that emits telemetry.
41+
var processor logsdk.Processor = logsdk.NewBatchProcessor(nil)
42+
43+
// Wrap the processor so that it filters by severity level defined
44+
// via environmental variable.
45+
processor = minsev.NewLogProcessor(processor, EnvSeverity{})
46+
lp := logsdk.NewLoggerProvider(
47+
logsdk.WithProcessor(processor),
48+
)
49+
50+
// Show that Logs API respects the minimum severity level processor.
51+
l := lp.Logger("ExampleSeveritier")
3952

4053
ctx := context.Background()
4154
params := log.EnabledParameters{Severity: log.SeverityDebug}
42-
fmt.Println(p.Enabled(ctx, params))
55+
fmt.Println(l.Enabled(ctx, params))
4356

4457
params.Severity = log.SeverityError
45-
fmt.Println(p.Enabled(ctx, params))
58+
fmt.Println(l.Enabled(ctx, params))
4659

4760
// Output:
4861
// false

processors/minsev/go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ go 1.22.0
44

55
require (
66
github.com/stretchr/testify v1.10.0
7-
go.opentelemetry.io/otel/log v0.10.0
8-
go.opentelemetry.io/otel/sdk/log v0.10.0
7+
go.opentelemetry.io/otel/log v0.10.1-0.20250224125506-8f4a5c69cefc
8+
go.opentelemetry.io/otel/sdk/log v0.10.1-0.20250224125506-8f4a5c69cefc
99
)
1010

1111
require (

processors/minsev/go.sum

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
55
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
66
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
77
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
8-
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
9-
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
8+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
9+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
1010
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
1111
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
1212
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
@@ -23,14 +23,14 @@ go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJyS
2323
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
2424
go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
2525
go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
26-
go.opentelemetry.io/otel/log v0.10.0 h1:1CXmspaRITvFcjA4kyVszuG4HjA61fPDxMb7q3BuyF0=
27-
go.opentelemetry.io/otel/log v0.10.0/go.mod h1:PbVdm9bXKku/gL0oFfUF4wwsQsOPlpo4VEqjvxih+FM=
26+
go.opentelemetry.io/otel/log v0.10.1-0.20250224125506-8f4a5c69cefc h1:vIGFFRXNhebgQQBIw7c2w4K93npz67/xmQhhing8CsU=
27+
go.opentelemetry.io/otel/log v0.10.1-0.20250224125506-8f4a5c69cefc/go.mod h1:PbVdm9bXKku/gL0oFfUF4wwsQsOPlpo4VEqjvxih+FM=
2828
go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
2929
go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
3030
go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A=
3131
go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU=
32-
go.opentelemetry.io/otel/sdk/log v0.10.0 h1:lR4teQGWfeDVGoute6l0Ou+RpFqQ9vaPdrNJlST0bvw=
33-
go.opentelemetry.io/otel/sdk/log v0.10.0/go.mod h1:A+V1UTWREhWAittaQEG4bYm4gAZa6xnvVu+xKrIRkzo=
32+
go.opentelemetry.io/otel/sdk/log v0.10.1-0.20250224125506-8f4a5c69cefc h1:m0gido5erFeG6rw0oeHG+q6phCt2zJoITOb9Ep8utfA=
33+
go.opentelemetry.io/otel/sdk/log v0.10.1-0.20250224125506-8f4a5c69cefc/go.mod h1:OgBCX0YiEQebWDdNSNyuu2Ls494YylU4nGBLKScoyrY=
3434
go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
3535
go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
3636
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=

processors/minsev/minsev.go

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ package minsev // import "go.opentelemetry.io/contrib/processors/minsev"
88
import (
99
"context"
1010

11-
api "go.opentelemetry.io/otel/log"
1211
"go.opentelemetry.io/otel/sdk/log"
1312
)
1413

@@ -31,18 +30,12 @@ func NewLogProcessor(downstream log.Processor, severity Severitier) *LogProcesso
3130
severity = SeverityInfo
3231
}
3332
p := &LogProcessor{Processor: downstream, sev: severity}
34-
if fp, ok := downstream.(filterProcessor); ok {
33+
if fp, ok := downstream.(log.FilterProcessor); ok {
3534
p.filter = fp
3635
}
3736
return p
3837
}
3938

40-
// filterProcessor is the experimental optional interface a Processor can
41-
// implement (go.opentelemetry.io/otel/sdk/log/internal/x).
42-
type filterProcessor interface {
43-
Enabled(ctx context.Context, param api.EnabledParameters) bool
44-
}
45-
4639
// LogProcessor is an [log.Processor] implementation that wraps another
4740
// [log.Processor]. It will pass-through calls to OnEmit and Enabled for
4841
// records with severity greater than or equal to a minimum. All other method
@@ -54,12 +47,15 @@ type filterProcessor interface {
5447
type LogProcessor struct {
5548
log.Processor
5649

57-
filter filterProcessor
50+
filter log.FilterProcessor
5851
sev Severitier
5952
}
6053

61-
// Compile time assertion that LogProcessor implements log.Processor.
62-
var _ log.Processor = (*LogProcessor)(nil)
54+
// Compile time assertion that LogProcessor implements log.Processor and log.FilterProcessor.
55+
var (
56+
_ log.Processor = (*LogProcessor)(nil)
57+
_ log.FilterProcessor = (*LogProcessor)(nil)
58+
)
6359

6460
// OnEmit passes ctx and r to the [log.Processor] that p wraps if the severity
6561
// of record is greater than or equal to p.Minimum. Otherwise, record is
@@ -74,7 +70,7 @@ func (p *LogProcessor) OnEmit(ctx context.Context, record *log.Record) error {
7470
// Enabled returns if the [log.Processor] that p wraps is enabled if the
7571
// severity of param is greater than or equal to p.Minimum. Otherwise false is
7672
// returned.
77-
func (p *LogProcessor) Enabled(ctx context.Context, param api.EnabledParameters) bool {
73+
func (p *LogProcessor) Enabled(ctx context.Context, param log.EnabledParameters) bool {
7874
sev := param.Severity
7975
if p.filter != nil {
8076
return sev >= p.sev.Severity() &&
@@ -88,6 +84,6 @@ var defaultProcessor = noopProcessor{}
8884
type noopProcessor struct{}
8985

9086
func (p noopProcessor) OnEmit(context.Context, *log.Record) error { return nil }
91-
func (p noopProcessor) Enabled(context.Context, api.EnabledParameters) bool { return false }
87+
func (p noopProcessor) Enabled(context.Context, log.EnabledParameters) bool { return false }
9288
func (p noopProcessor) Shutdown(context.Context) error { return nil }
9389
func (p noopProcessor) ForceFlush(context.Context) error { return nil }

processors/minsev/minsev_test.go

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ type emitArgs struct {
3333

3434
type enabledArgs struct {
3535
Ctx context.Context
36-
Param api.EnabledParameters
36+
Param log.EnabledParameters
3737
}
3838

3939
type processor struct {
@@ -45,12 +45,18 @@ type processor struct {
4545
ShutdownCalls []context.Context
4646
}
4747

48+
// Compile time assertion that processor implements log.Processor and log.FilterProcessor.
49+
var (
50+
_ log.Processor = (*processor)(nil)
51+
_ log.FilterProcessor = (*processor)(nil)
52+
)
53+
4854
func (p *processor) OnEmit(ctx context.Context, r *log.Record) error {
4955
p.OnEmitCalls = append(p.OnEmitCalls, emitArgs{ctx, r})
5056
return p.ReturnErr
5157
}
5258

53-
func (p *processor) Enabled(ctx context.Context, param api.EnabledParameters) bool {
59+
func (p *processor) Enabled(ctx context.Context, param log.EnabledParameters) bool {
5460
p.EnabledCalls = append(p.EnabledCalls, enabledArgs{ctx, param})
5561
return true
5662
}
@@ -78,19 +84,19 @@ func TestLogProcessorDynamicSeverity(t *testing.T) {
7884
p := NewLogProcessor(wrapped, sev)
7985

8086
ctx := context.Background()
81-
params := &api.EnabledParameters{Severity: api.SeverityDebug}
82-
assert.False(t, p.Enabled(ctx, *params), api.SeverityDebug.String())
87+
params := log.EnabledParameters{Severity: api.SeverityDebug}
88+
assert.False(t, p.Enabled(ctx, params), api.SeverityDebug.String())
8389

8490
params.Severity = api.SeverityInfo
85-
assert.True(t, p.Enabled(ctx, *params), api.SeverityInfo.String())
91+
assert.True(t, p.Enabled(ctx, params), api.SeverityInfo.String())
8692

8793
sev.Set(SeverityError)
8894

8995
params.Severity = api.SeverityInfo
90-
assert.False(t, p.Enabled(ctx, *params), api.SeverityInfo.String())
96+
assert.False(t, p.Enabled(ctx, params), api.SeverityInfo.String())
9197

9298
params.Severity = api.SeverityError
93-
assert.True(t, p.Enabled(ctx, *params), api.SeverityError.String())
99+
assert.True(t, p.Enabled(ctx, params), api.SeverityError.String())
94100
}
95101

96102
func TestLogProcessorOnEmit(t *testing.T) {
@@ -135,7 +141,7 @@ func TestLogProcessorEnabled(t *testing.T) {
135141

136142
p := NewLogProcessor(wrapped, SeverityTrace1)
137143
ctx := context.Background()
138-
param := api.EnabledParameters{}
144+
param := log.EnabledParameters{}
139145
for _, sev := range severities {
140146
param.Severity = sev
141147
assert.True(t, p.Enabled(ctx, param), sev.String())
@@ -153,7 +159,7 @@ func TestLogProcessorEnabled(t *testing.T) {
153159

154160
p := NewLogProcessor(wrapped, apiSev(api.SeverityFatal4+1))
155161
ctx := context.Background()
156-
param := api.EnabledParameters{}
162+
param := log.EnabledParameters{}
157163
for _, sev := range severities {
158164
param.Severity = sev
159165
assert.False(t, p.Enabled(ctx, param), sev.String())
@@ -170,16 +176,16 @@ func TestLogProcessorEnabled(t *testing.T) {
170176
pruned := struct{ log.Processor }{wrapped} // Remove the Enabled method.
171177
p := NewLogProcessor(pruned, SeverityInfo)
172178
ctx := context.Background()
173-
params := &api.EnabledParameters{}
179+
params := log.EnabledParameters{}
174180

175181
params.Severity = api.SeverityDebug
176-
assert.False(t, p.Enabled(ctx, *params))
182+
assert.False(t, p.Enabled(ctx, params))
177183

178184
params.Severity = api.SeverityInfo
179-
assert.True(t, p.Enabled(ctx, *params))
185+
assert.True(t, p.Enabled(ctx, params))
180186

181187
params.Severity = api.SeverityError
182-
assert.True(t, p.Enabled(ctx, *params))
188+
assert.True(t, p.Enabled(ctx, params))
183189

184190
assert.Empty(t, wrapped.EnabledCalls)
185191
})
@@ -213,7 +219,7 @@ func TestLogProcessorNilDownstream(t *testing.T) {
213219
ctx := context.Background()
214220
r := new(log.Record)
215221
r.SetSeverity(api.SeverityTrace1)
216-
param := api.EnabledParameters{Severity: api.SeverityTrace1}
222+
param := log.EnabledParameters{Severity: api.SeverityTrace1}
217223
assert.NotPanics(t, func() {
218224
assert.NoError(t, p.OnEmit(ctx, r))
219225
assert.False(t, p.Enabled(ctx, param))
@@ -225,12 +231,12 @@ func TestLogProcessorNilDownstream(t *testing.T) {
225231
func BenchmarkLogProcessor(b *testing.B) {
226232
r := new(log.Record)
227233
r.SetSeverity(api.SeverityTrace)
228-
param := api.EnabledParameters{Severity: api.SeverityTrace}
234+
param := log.EnabledParameters{Severity: api.SeverityTrace}
229235
ctx := context.Background()
230236

231237
type combo interface {
232238
log.Processor
233-
filterProcessor
239+
log.FilterProcessor
234240
}
235241

236242
run := func(p combo) func(b *testing.B) {

processors/minsev/severity_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright The OpenTelemetry Authors
22
// SPDX-License-Identifier: Apache-2.0
33

4-
package minsev // import "go.opentelemetry.io/contrib/processors/minsev"
4+
package minsev
55

66
import (
77
"sync"

0 commit comments

Comments
 (0)