This repository provides a logr.Logger
that exports recorded messages as OpenTelemetry logs to an OTLP receiving endpoint.
🚧 This repository is a work in progress and not production ready.
A working gRPC connection to an OTLP receiving endpoint is needed to setup the logger.
conn, _ := grpc.DialContext(ctx, otlpTarget)
Create a logr.Logger
with this connection.
logger := otlpr.New(conn)
See the example for a working example application.
By default the logger will batch the log messages as they are received.
It will wait to batch 2048
messages before exporting.
A Batcher
can be used to change this behavior.
opts := otlpr.Options{
Batcher: otlpr.Batcher{
// Only queue at most 100 messages.
Messages: 100,
// Only wait 3 seconds for the queue to fill.
Timeout: 3 * time.Second,
},
}
logger := otlpr.NewWithOptions(conn, opts)
The Batcher
can be configured to limit the number of messages it sends for
each export with the ExportN
setting.
opts := otlpr.Options{
Batcher: otlpr.Batcher{
// Only send at most 100 messages per export.
ExportN: 100,
},
}
logger := otlpr.NewWithOptions(conn, opts)
OTLP is able to associate span context with log messages.
Use the WithContext
function to associate a context.Context
that contains an active span with all logs the logger creates.
logger = otlpr.WithContext(logger, ctx)
The function can also be used to clear any span context from the logger.
logger = otlpr.WithContext(logger, context.Background())
The system a log message is produced in can be described with a Resource
.
Use the WithResource
function to include this information with the exported OTLP data.
logger = otlpr.WithResource(logger, resource)
The function can also be used to clear any resource from the logger.
logger = otlpr.WithResource(logger, nil)
The portion of a system a log message is produced in can be described with Scope
.
Use the WithScope
function to include this information with the exported OTLP data.
logger = otlpr.WithScope(logger, resource)
The function can also be used to clear any scope from the logger.
logger = otlpr.WithScope(logger, instrumentation.Scope{})