val tracerProvider = SdkTracerProvider.builder()
.addSpanProcessor(BatchSpanProcessor.builder(OtlpJsonLoggingSpanExporter.create()).build())
.setResource(resource)
.build()
val openTelemetry = OpenTelemetrySdk.builder()
.setTracerProvider(tracerProvider)
.build()
GlobalOpenTelemetry.set(openTelemetry)
// Configure the output log file
val otlpLogger = Logger.getLogger(OtlpJsonLoggingSpanExporter::class.java.getName())
val spansFile = amperBuildLogsRoot.path.resolve("opentelemetry_traces.jsonl")
val fileHandler = FileHandler(spansFile.pathString, true) // true to append, false to overwrite
fileHandler.formatter = MessageOnlyFormatter
otlpLogger.addHandler(fileHandler)
otlpLogger.level = Level.ALL
// A simple formatter to avoid the usual logging makeup in the file and keep the pure JSON lines output
private object MessageOnlyFormatter : Formatter() {
override fun format(record: LogRecord?): String = formatMessage(record) + "\n"
}
And check the output files after producing some spans.
What did you expect to see?
A file that looks like the examples in the specification:
Additional context
This is a CLI application exporting telemetry in log files (for which JSON lines are important), and visualization is done in Jaeger UI after the fact.
Describe the bug
The log files produced by
OtlpJsonLoggingSpanExporter
contain JSON lines, but each line is missing the{ "resourceSpans": [ ... ] }
wrapper described here: https://opentelemetry.io/docs/specs/otel/protocol/file-exporter/#examplesSteps to reproduce
Use this kind of configuration:
And check the output files after producing some spans.
What did you expect to see?
A file that looks like the examples in the specification:
What did you see instead?
A file containing directly the object with the
"resource"
key on each line:What version and what artifacts are you using? Artifacts:
Version: 1.42.1
How did you reference these artifacts? (excerpt from your
build.gradle
,pom.xml
, etc) My Gradle catalog:Environment Compiler: Corretto 21 OS: Windows
Additional context This is a CLI application exporting telemetry in log files (for which JSON lines are important), and visualization is done in Jaeger UI after the fact.