tencent cloud

腾讯云可观测平台

动态与公告
产品动态
产品简介
产品概述
产品优势
基本功能
基本概念
应用场景
使用限制
购买指南
云产品监控
应用性能监控
终端性能监控
前端性能监控
云拨测
Prometheus 监控服务
Grafana 服务
事件总线
云压测
快速入门
监控概览
实例分组
云产品监控
应用性能监控
云拨测
云压测
Prometheus 监控服务
Grafana 服务
创建 Dashboard
事件总线
告警服务
云产品监控
云产品监控指标
控制台操作指南
云服务器监控组件
云产品监控对接 Grafana
故障处理
实践教程
应用性能监控
应用性能监控简介
接入指南
控制台操作指南
实践教程
参考信息
常见问题
终端性能监控
终端性能监控概述
控制台操作指南
接入指南
实践教程
前端性能监控
前端性能监控简介
控制台操作指南
接入指南
常见问题
云拨测
产品简介
控制台操作指南
常见问题
云压测
云压测概述
控制台操作指南
实践教程
JavaScript API 列表
常见问题
Prometheus 监控
Prometheus 监控简介
接入指南
控制台操作指南
实践教程
Terraform
常见问题
Grafana 服务
产品简介
控制台操作指南
Grafana 平台常用功能指引
常见问题
Dashboard
什么是 Dashboard
控制台操作指南
告警管理
控制台操作指南
故障处理
常见问题
事件总线
事件总线简介
控制台操作指南
实践教程
常见问题
报表管理
常见问题
腾讯云可观测平台常见问题
告警服务相关
一般性问题
监控图表相关
云服务器监控组件相关
动态阈值告警相关
云监控对接 Grafana 相关
文档阅读指南
相关协议
应用性能监控服务等级协议
APM 隐私协议
APM 数据处理和安全协议
前端性能监控服务等级协议
终端性能监控服务等级协议
云拨测服务等级协议
Prometheus 监控服务服务等级协议
Grafana 服务服务等级协议
云压测服务等级协议
云压测使用限制
Cloud Monitor Service Level Agreement
词汇表

Skywalking 协议(Java)

PDF
聚焦模式
字号
最后更新时间: 2025-03-12 11:41:37
本文将介绍 Java skywalking 上报方式如何关联 TraceID。

操作步骤

配置 Logback 输出 TraceID

1. 引入依赖。
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>8.3.0</version>
</dependency>
2. 修改 logback-spring.xml 中的 Appender 的 Pattern 格式。
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</encoder>
3. 启动项目,打印结果如下:
%tid 会打印 TraceID,默认 TID:N/A,当有请求调用时,会显示 TraceID。




配置 log4j-1x 输出 TraceID

1. 通过 maven 或 gradle 引入 toolkit 依赖。
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-log4j-1.x</artifactId>
<version>{project.release.version}</version>
</dependency>
2. 修改 log4j1.properties 配置 layout。
log4j.appender.CONSOLE.layout=org.apache.skywalking.apm.toolkit.log.log4j.v1.x.TraceIdPatternLayout
layout.ConversionPattern 中设置 %T (在2.0-2016中,您应该使用%x,为什么做了修改? )。
log4j.appender.CONSOLE.layout.ConversionPattern=%d [%T] %-5p %c{1}:%L - %m%n
3. 启动项目,打印结果如下:
假设 TraceID 存在,当您使用 -javaagent 激活 skywalking tracer 后,log4j 将会输出 TraceID。如果 tracer 未激活,输出将是 TID: N/A




配置 log4j-2x 输出 TraceID

1. 使用 maven 或 gradle 引入 toolkit 依赖。
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-log4j-2.x</artifactId>
<version>{project.release.version}</version>
</dependency>
2. 在 log4j2.xml 的 pattern 中配置[%traceId]
支持在 log4j2.xml 的 pattern 中配置 [%traceId]。
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d [%traceId] %-5p %c{1}:%L - %m%n"/>
</Console>
</Appenders>
支持 log4j2 AsyncRoot,无需其他配置。请参阅下文的 log4j2.xml 演示。有关详细信息请参见 Log4j2异步记录器
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d [%traceId] %-5p %c{1}:%L - %m%n"/>
</Console>
</Appenders>
<Loggers>
<AsyncRoot level="INFO">
<AppenderRef ref="Console"/>
</AsyncRoot>
</Loggers>
</Configuration>
支持 log4j2 AsyncAppender,不需要其他配置。请参阅下文的 log4j2.xml 演示。有关详细信息请参见 All Loggers Async
说明:
Log4j-2.9和更高版本要求在类路径上使用 disruptor-3.3.4.jar 或更高版本。在 Log4j-2.9之前,需要使用 interrupter-3.0.0.jar 或更高版本。 这是最简单的配置,并提供最佳性能。要使所有记录器异步,请将 disruptor jar 添加到类路径中并且 设置系统属性 log4j2.contextSelectororg.apache.logging.log4j.core.async.AsyncLoggerContextSelector
<Configuration status="WARN">
<Appenders>
<!-- Async Loggers will auto-flush in batches, so switch off immediateFlush. -->
<RandomAccessFile name="RandomAccessFile" fileName="async.log" immediateFlush="false" append="false">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] [%traceId] %m %ex%n</Pattern>
</PatternLayout>
</RandomAccessFile>
</Appenders>
<Loggers>
<Root level="info" includeLocation="false">
<AppenderRef ref="RandomAccessFile"/>
</Root>
</Loggers>
</Configuration>
详细可参见: [Mixed Sync & Async] #MixedSync-Async
说明:
Log4j-2.9及更高版本需要类路径上使用 disruptor-3.3.4.jar 或更高版本。在 Log4j-2.9之前,需要 disruptor-3.0.0.jar 或更高版本。不需要将系统属性 “Log4jContextSelector” 设置为任何值。
<Configuration status="WARN">
<Appenders>
<!-- Async Loggers will auto-flush in batches, so switch off immediateFlush. -->
<RandomAccessFile name="RandomAccessFile" fileName="asyncWithLocation.log"
immediateFlush="false" append="false">
<PatternLayout>
<Pattern>%d %p %class{1.} [%t] [%traceId] %location %m %ex%n</Pattern>
</PatternLayout>
</RandomAccessFile>
</Appenders>
<Loggers>
<!-- pattern layout actually uses location, so we need to include it -->
<AsyncLogger name="com.foo.Bar" level="trace" includeLocation="true">
<AppenderRef ref="RandomAccessFile"/>
</AsyncLogger>
<Root level="info" includeLocation="true">
<AppenderRef ref="RandomAccessFile"/>
</Root>
</Loggers>
</Configuration>
支持 log4j2 AsyncAppender,详细信息请参见 Log4j2 AsyncAppender
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d [%traceId] %-5p %c{1}:%L - %m%n"/>
</Console>
<Async name="Async">
<AppenderRef ref="Console"/>
</Async>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Async"/>
</Root>
</Loggers>
</Configuration>
3. 启动项目,打印结果如下。
假设 TraceID 存在,当您使用 -javaagent 激活 skywalking tracer 后,log4j 将会输出 TraceID。如果 tracer 未激活,输出将是TID: N/A




帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈