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"
|
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.
|
||||||
|
Loading…
Reference in New Issue
Block a user