1
0
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:
Robert Pająk 2024-07-01 15:49:12 +02:00 committed by GitHub
parent d7e5001b4d
commit b477e34939
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -11,6 +11,55 @@ import (
logsdk "go.opentelemetry.io/otel/sdk/log" 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. // Use a processor which redacts sensitive data from some attributes.
func ExampleProcessor_redact() { func ExampleProcessor_redact() {
// Existing processor that emits telemetry. // Existing processor that emits telemetry.