The Mapped Diagnostic Context (MDC) is
an instrument for distinguishing interleaved log output from different sources. — log4j MDC documentation
It contains thread-local contextual information which is later copied to each logging event captured by a logging library.
The OTel Java agent injects several pieces of information about the current span into each logging event's MDC copy:
traceId
- the current trace id (same asSpan.current().getSpanContext().getTraceIdAsHexString()
);spanId
- the current span id (same asSpan.current().getSpanContext().getSpanIdAsHexString()
);sampled
- a boolean flag marking whether the current span is sampled or not (same asSpan.current().getSpanContext().isSampled()
).
Those three pieces of information can be included in log statements produced by the logging library by specifying them in the pattern/format. Example for Spring Boot configuration (which uses logback):
logging.pattern.console = %d{yyyy-MM-dd HH:mm:ss} - %logger{36} - %msg t:%X{traceId} s:%X{spanId} %n
This way any services or tools that parse the application logs can correlate traces/spans with log statements.
Library | Version |
---|---|
Log4j 1 | 1.2+ |
Log4j 2 | 2.7+ |
Logback | 1.0+ |