链路追踪 (trace)
简介
continew-starter-trace
是 ContiNew Starter 链路追踪模块,底层基于 TLog 实现分布式系统的调用链路追踪,通过自动生成和传递 TraceId,帮助开发者快速定位跨服务调用问题,提升系统可观测性。
主要特性
- 自动生成全局唯一TraceId,支持跨服务传递
- 集成日志框架MDC,实现全链路日志关联
- 自定义TraceId生成策略
- 灵活的配置选项,支持日志输出格式自定义
- 低侵入式设计,通过过滤器自动拦截请求
快速开始
引入依赖
xml
<dependency>
<groupId>top.continew.starter</groupId>
<artifactId>continew-starter-trace</artifactId>
</dependency>
添加配置
添加完如下配置后,链路追踪功能将自动生效,自动生成 TraceId 并添加到响应头中。
yaml
--- ### 链路追踪配置
continew-starter.trace:
enabled: true
trace-id-name: X-Trace-Id
## TLog 配置
tlog:
enable-invoke-time-print: false
pattern: '[$spanId][$traceId]'
mdc-enable: false
修改日志配置
如果需要在日志输出中添加 TraceId,请修改日志配置文件。
xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="30 seconds">
<!-- 应用名 -->
<springProperty name="APP_NAME" source="spring.application.name" scope="context"/>
<!-- 保存路径 -->
<property name="LOG_PATH" value="${LOG_PATH:-./logs}"/>
<!-- 字符集 -->
<property name="LOG_CHARSET" value="utf-8"/>
<!-- 格式化输出:%d 表示日期;%thread 表示线程名;%-5level:级别从左显示 5 个字符宽度;%msg:日志消息;%n 是换行符 -->
<!-- 控制台输出格式(带颜色) -->
<property name="CONSOLE_LOG_PATTERN" value="%red(%d{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %green([%thread]) %boldMagenta(%logger{50}) - %msg%n"/>
<!-- 文件输出格式 -->
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{50} - %msg%n"/>
<!-- 单个日志文件大小上限 -->
<property name="FILE_MAX_SIZE" value="20MB"/>
<!-- 输出日志到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>${LOG_CHARSET}</charset>
</encoder>
</appender>
<!-- 输出日志到控制台(不带颜色) -->
<appender name="CONSOLE_PROD" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>${LOG_CHARSET}</charset>
</encoder>
</appender>
<!-- 输出日志到文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/${APP_NAME}.log</file>
<!-- 滚动策略:基于文件大小和时间归档日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>${FILE_MAX_SIZE}</maxFileSize>
<maxHistory>${FILE_MAX_HISTORY}</maxHistory>
</rollingPolicy>
<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>${LOG_CHARSET}</charset>
</encoder>
</appender>
<!-- 输出日志到文件(异步) -->
<appender name="ASYNC_FILE" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
<!-- 不丢失日志,默认:如果队列的 80% 已满,则会丢弃 TRACT、DEBUG、INFO 级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能,默认:256 -->
<queueSize>512</queueSize>
<!-- 添加附加的 appender,最多只能添加一个 -->
<appender-ref ref="FILE"/>
</appender>
<!-- 开发环境:只打印到控制台 -->
<springProfile name="dev">
<!-- 如果配置的日志等级,和 application.yml 中的日志等级配置重叠,application.yml 配置优先级高 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
<!-- 生产环境:打印到控制台并输出到文件 -->
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="CONSOLE_PROD"/>
<appender-ref ref="ASYNC_FILE"/>
</root>
<!-- 日志保留天数(根据国家法律,网络运行状态、网络安全事件、个人敏感信息操作等相关记录,留存的日志不少于六个月,并且进行网络多机备份。) -->
<property name="FILE_MAX_HISTORY" value="180"/>
</springProfile>
</configuration>
自定义TraceId生成器
默认使用TraceIdGenerator
基于雪花算法生成TraceId,如需自定义实现:
- 创建自定义生成器类实现
TLogIdGenerator
接口
java
public class CustomTraceIdGenerator extends TLogIdGenerator {
@Override
public String generateTraceId() {
// 自定义TraceId生成逻辑
return UUID.randomUUID().toString().replace("-", "");
}
}
- 注册为Spring Bean
java
@Configuration
public class TraceConfig {
@Bean
public TLogIdGenerator customTraceIdGenerator() {
return new CustomTraceIdGenerator();
}
}
核心依赖
依赖 | 描述 |
---|---|
top.continew.starter:continew-starter-core | 核心模块 |
com.yomahub:tlog-web-spring-boot-starter | TLog(轻量级的分布式日志标记追踪神器) |
参考资料
- TLog 官方文档:https://tlog.yomahub.com/