%X{trace_id}和 %X{span_id}字段注入。日志框架 | 支持的版本范围 |
Log4j | 1.2+ |
Log4j2 | 2.7+ |
Logback | 1.0+ |
log4j.appender.warn.layout=org.apache.log4j.PatternLayoutlog4j.appender.warn.layout.ConversionPattern=trace_id: %X{trace_id} span_id: %X{span_id} - %m%n
<PatternLayout pattern="trace_id: %X{trace_id} span_id: %X{span_id} - %m%n"/>
<PatternLayout><Pattern>trace_id: %X{trace_id} span_id: %X{span_id} - %m%n</Pattern></PatternLayout>
<Layout type="PatternLayout" pattern="trace_id: %X{trace_id} span_id: %X{span_id} - %m%n"/>
<encoder><pattern>trace_id: %X{trace_id} span_id: %X{span_id} %msg%n</pattern></encoder>
trace_id和span_id作为标记,向日志中注入 TraceID 和 SpanID。日志框架 | 包路径 | 支持的版本范围 |
Zap | go.uber.org/zap/zapcore | 1.20.0+ |
Logrus | github.com/sirupsen/logrus | 1.5.0+ |
Zerolog | github.com/rs/zerolog | 1.10.0+ |
go-kit/log | github.com/go-kit/log | 0.1.0+ |
Go 标准库 log | log | 无限制 |
Go 标准库 slog | log/slog | 无限制 |
{"level":"info","msg":"this is info message","trace_id":"38e6910973e1c0c11351e502329d2d72","span_id":"6f4efff78445ea61"}OTEL_PYTHON_LOG_CORRELATION环境变量,即可实现对 TraceID 和 SpanID 的注入。# Enable Log CorrelationOTEL_PYTHON_LOG_CORRELATION=truetapm-instrument \\--traces_exporter otlp \\--metrics_exporter otlp \\--logs_exporter none \\--service_name python-web-test \\--resource_attributes "token=xxxxx" \\--exporter_otlp_endpoint xxxxxx \\python main.py
2026-02-2519:51:25,069 INFO[__main__][main.py:19][trace_id=c20f528fa45eebc2cbdae9e341ced39aspan_id=fa84ffb16a978ab6 resource.service.name=python-web-testtrace_sampled=True]
trace_id和span_id作为标记,向日志中注入 TraceID 和 SpanID。日志框架 | 包路径 | 支持的版本范围 |
Winston | github.com/winstonjs/winston | 1.0.0+ |
Pino | github.com/pinojs/pino | 5.14.0+ |
Bunyan | trentm/node-bunyan | 1.0.0+ |
INFO: this is info message: GET /|trace_id="e793e3edafb93f98a8a395c13096a26f"span_id="9564de488477c6a8"trace_flags="01"
const logger = winston.createLogger({level: "info",format: winston.format.combine(winston.format.timestamp(),winston.format.printf(({ timestamp, level, message, trace_id, span_id }) => {return `${timestamp} [${level.toUpperCase()}] [trace_id=${trace_id} span_id=${span_id}]: ${message}`;})),transports: [new winston.transports.Console()],});
日志框架 | 支持的版本范围 |
Log4Net | 2.0.13+ |
NLog | 5.0.0+ |
%property{trace_id}和%property{span_id}字段注入。<layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%level] %logger - %message trace_id=%property{trace_id} span_id=%property{span_id} %newline" /></layout>
${event-properties:TraceId}和span_id=${event-properties:SpanId}字段注入。<target xsi:type="File" name="file" fileName="logs/app.log"layout="${longdate} [${level:uppercase=true}] ${logger} - ${message} trace_id=${event-properties:TraceId} span_id=${event-properties:SpanId}" />
func logWithTrace(ctx context.Context, format string, args ...interface{}) {span := trace.SpanFromContext(ctx)sc := span.SpanContext()traceID := sc.TraceID().String()spanID := sc.SpanID().String()msg := fmt.Sprintf(format, args...)log.Printf("[trace_id: %s span_id: %s] %s", traceID, spanID, msg)}
文档反馈