如何将 TraceId 和 SpanId 注入日志
本文介绍如何将 TraceId 和 SpanId 自动写入日志。TraceId与SpanId写入日志后,可以将分布式链路数据与日志数据关联起来,实现更高效的故障诊断和性能分析。
Java
支持的日志库
- 更多信息,请参考 Logger MDC auto-instrumentation。
日志框架 | 自动埋点支持的版本 | 手动埋点需要引入的依赖 |
---|---|---|
Log4j 1 | 1.2+ | 无 |
Log4j 2 | 2.7+ | opentelemetry-log4j-context-data-2.17-autoconfigure |
Logback | 1.0+ | opentelemetry-logback-mdc-1.0 |
使用 Log4j2
- 在 pom.xml 中添加 OpenTelemetry Log4j2 依赖。
- 请将
${OPENTELEMETRY_VERSION}
替换为最新版本。
- 修改 log4j2.xml 配置,在 pattern 中添加
%X{trace_id}
与%X{span_id}
,可以将 TraceId 与 SpanId 自动写入日志。
- 以下为日志格式示例:
使用 Logback
- 在 pom.xml 中添加 OpenTelemetry Logback 依赖。
- 请将
${OPENTELEMETRY_VERSION}
替换为最新版本。
- 修改 logback.xml 配置,在 pattern 中添加
%X{trace_id}
与%X{span_id}
,可以将 TraceId 与 SpanId 自动写入日志。
- 以下为日志格式示例:
**使用 **Logback(SpringBoot 项目)
Spring Boot 项目内置了日志框架,并且默认使用 Logback 作为其日志实现。如果您的 Java 项目为 SpringBoot 项目,只需少量配置即可将 TraceId 写入日志。
- 在 application.properties 中设置 logging.pattern.level,添加
%mdc{trace_id}
与%mdc{span_id}
到日志中:
- 以下为日志示例:
Go
OpenTelemetry Go 不支持自动注入,需要在记录日志时手动注入 TraceId 和 SpanId。
**使用 **logrus
- 引入依赖。
- 创建工具函数,从 Span 中提取 SpanID 和 TraceID,并添加到 Logrus 日志字段。
- 在创建一个 Span 后,即可记录带有 TraceId 和 SpanId 的日志。
Python
OpenTelemetry Python 支持自动将 TraceId 与 SpanId 注入到日志中,更多信息请参考 OpenTelemetry Logging Instrumentation。
使用 logging
- 设置环境变量 OTEL_PYTHON_LOG_CORRELATION 为 true:
- 在日志格式中添加
%(otelTraceID)s
和%(otelSpanID)s
,OpenTelemetry 会自动将日志中的%(otelTraceID)s
和%(otelSpanID)s
替换为 TraceId 和 SpanId。
- 以下为 logging.Formatter 示例:
- 以下为日志示例: