mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2024-12-28 21:09:17 +02:00
sdk/log: Add filtering Processor example (#5543)
Towards https://github.com/open-telemetry/opentelemetry-go/issues/5065
This commit is contained in:
parent
d7e5001b4d
commit
b477e34939
@ -11,6 +11,55 @@ import (
|
||||
logsdk "go.opentelemetry.io/otel/sdk/log"
|
||||
)
|
||||
|
||||
// Use a processor that filters out records based on the provided context.
|
||||
func ExampleProcessor_filtering() {
|
||||
// Existing processor that emits telemetry.
|
||||
var processor logsdk.Processor = logsdk.NewBatchProcessor(nil)
|
||||
|
||||
// Wrap the processor so that it ignores processing log records
|
||||
// when a context deriving from WithIgnoreLogs is passed
|
||||
// to the logging methods.
|
||||
processor = &ContextFilterProcessor{processor}
|
||||
|
||||
// The created processor can then be registered with
|
||||
// the OpenTelemetry Logs SDK using the WithProcessor option.
|
||||
_ = logsdk.NewLoggerProvider(
|
||||
logsdk.WithProcessor(processor),
|
||||
)
|
||||
}
|
||||
|
||||
type key struct{}
|
||||
|
||||
var igoreLogsKey key
|
||||
|
||||
// WithIgnoreLogs returns a context which is used by [ContextFilterProcessor]
|
||||
// to filter out log records.
|
||||
func WithIgnoreLogs(ctx context.Context) context.Context {
|
||||
return context.WithValue(ctx, igoreLogsKey, true)
|
||||
}
|
||||
|
||||
// ContextFilterProcessor filters out logs when a context deriving from
|
||||
// [WithIgnoreLogs] is passed to its methods.
|
||||
type ContextFilterProcessor struct {
|
||||
logsdk.Processor
|
||||
}
|
||||
|
||||
func (p *ContextFilterProcessor) OnEmit(ctx context.Context, record logsdk.Record) error {
|
||||
if ignoreLogs(ctx) {
|
||||
return nil
|
||||
}
|
||||
return p.Processor.OnEmit(ctx, record)
|
||||
}
|
||||
|
||||
func (p *ContextFilterProcessor) Enabled(ctx context.Context, record logsdk.Record) bool {
|
||||
return !ignoreLogs(ctx) && p.Processor.Enabled(ctx, record)
|
||||
}
|
||||
|
||||
func ignoreLogs(ctx context.Context) bool {
|
||||
_, ok := ctx.Value(igoreLogsKey).(bool)
|
||||
return ok
|
||||
}
|
||||
|
||||
// Use a processor which redacts sensitive data from some attributes.
|
||||
func ExampleProcessor_redact() {
|
||||
// Existing processor that emits telemetry.
|
||||
|
Loading…
Reference in New Issue
Block a user