# loger **Repository Path**: aigen6/loger ## Basic Information - **Project Name**: loger - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-11 - **Last Updated**: 2025-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Trace ID Spring Boot Starter [![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg)](https://github.com/trace/trace-id-spring-boot-starter) [![Coverage](https://img.shields.io/badge/coverage-90%25-brightgreen.svg)](https://github.com/trace/trace-id-spring-boot-starter) [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/trace/trace-id-spring-boot-starter) [![Java Version](https://img.shields.io/badge/java-8%2B-blue.svg)](https://github.com/trace/trace-id-spring-boot-starter) [![Spring Boot](https://img.shields.io/badge/spring%20boot-2.7%2B-brightgreen.svg)](https://github.com/trace/trace-id-spring-boot-starter) 一个轻量级、高性能的Java自定义Trace ID分布式链路追踪Spring Boot Starter库。 ## ✨ 特性 - 🚀 **高性能**:平均生成时间约5微秒,QPS > 100,000 - 🔗 **跨服务传递**:自动在HTTP请求头中传递Trace ID - 🧵 **线程安全**:基于TransmittableThreadLocal,支持异步任务上下文传递 - 📊 **日志集成**:自动在MDC中包含Trace ID,支持Logback和Log4j2 - ⚙️ **灵活配置**:支持YAML配置,可自定义Header名称、采样率等 - 🎯 **零侵入**:只需添加依赖和注解即可使用 - 📈 **监控友好**:提供Actuator端点支持 ## 📋 系统要求 - **Java**: 8+ (支持8、11、17) - **Spring Boot**: 2.7+ 或 3.x - **Maven**: 3.6+ - **日志框架**: Slf4j + Logback/Log4j2 ## 🚀 快速开始 ### 1. 添加依赖 ```xml com.trace trace-id-spring-boot-starter 1.0.0 ``` ### 2. 自动启用(零侵入) 无需任何注解,添加依赖后自动启用Trace功能! ### 3. 配置文件 在`application.yml`中添加配置: ```yaml trace: enabled: true # 启用Trace功能 header-name: X-Trace-Id # HTTP请求头名称 mdc-key: traceId # MDC中的Trace ID键名 sampling-rate: 1.0 # 采样率:1.0=100% async-enabled: true # 启用异步任务支持 web-enabled: true # 启用Web请求处理 ``` ### 4. 使用示例 现在只需要添加依赖,Trace功能就会自动启用: ```java @RestController public class UserController { private static final Logger logger = LoggerFactory.getLogger(UserController.class); @GetMapping("/users/{id}") public User getUser(@PathVariable Long id) { // 日志中会自动包含Trace ID,无需任何额外代码 logger.info("Getting user with id: {}", id); // Trace ID会自动传递给其他服务调用 userService.getUser(id); return user; } } ``` ### 5. 编程式API(可选) 如果需要编程式控制,可以使用TraceContext和MDCTraceUtils: ```java // 手动启动Trace上下文(可选) TraceContext.start("custom-trace-id"); // 获取当前Trace ID String traceId = TraceContext.getCurrentTraceId(); // 创建子Span TraceContext.createSpan("operation-name"); // 使用try-with-resources自动管理 try (TraceContext.TraceScope scope = TraceContext.withContext("trace-id")) { // 业务逻辑 } // 手动清理上下文(可选,会自动清理) TraceContext.clear(); ``` ## 📊 功能特性 ### Trace ID生成格式 支持多种生成格式: - **默认格式**:`hhmm+uuid10`(如:`1430a3b4c5d6`) - **自定义前缀**:`prefix-uuid`(如:`USER-a3b4c5d6`) - **短格式**:8位数字(如:`14301234`) ### 日志输出示例 ``` 2024-12-10 14:30:25.123 [traceId:1430a3b4c5d6] INFO c.e.s.UserController - Getting user with id: 123 2024-12-10 14:30:25.124 [traceId:1430a3b4c5d6] INFO c.e.s.UserService - Found user: 123 2024-12-10 14:30:25.125 [traceId:1430a3b4c5d6] INFO c.e.s.Database - Query executed in 2ms ``` ### HTTP请求头 **请求**: - `X-Trace-Id: 1430a3b4c5d6` **响应**: - `X-Trace-Id: 1430a3b4c5d6` ## ⚙️ 配置选项 ### 基础配置 ```yaml trace: enabled: true # 是否启用Trace功能 header-name: X-Trace-Id # HTTP请求头名称 span-separator: - # Span分隔符 sampling-rate: 1.0 # 采样率 (0.0-1.0) pattern: hhmm+uuid10 # Trace ID生成格式 ``` ### MDC配置 ```yaml trace: mdc-key: traceId # MDC中Trace ID键名 mdc-span-key: spanId # MDC中Span ID键名 ``` ### 功能开关 ```yaml trace: async-enabled: true # 异步任务Trace传递 web-enabled: true # Web请求处理 feign-enabled: true # Feign客户端支持 rest-template-enabled: true # RestTemplate支持 actuator-enabled: true # Actuator端点支持 ``` ### 性能配置 ```yaml trace: slow-request-threshold: 1000 # 慢请求阈值(毫秒) max-concurrent-traces: 10000 # 最大并发Trace数量 cleanup-interval: 60 # 清理间隔(秒) ``` ### OpenTelemetry兼容 ```yaml trace: open-telemetry: enabled: true # 启用OpenTelemetry兼容 traceparent-header: traceparent # traceparent Header名称 set-standard-headers: true # 设置标准Header ``` ## 🔧 编程式API ### TraceContext工具类 ```java // 启动Trace上下文 TraceContext.start("custom-trace-id"); // 获取当前Trace ID String traceId = TraceContext.getCurrentTraceId(); // 创建子Span TraceContext.createSpan("operation-name"); // 使用try-with-resources自动管理 try (TraceContext.TraceScope scope = TraceContext.withContext("trace-id")) { // 业务逻辑 } // 清理上下文 TraceContext.clear(); ``` ### MDCTraceUtils工具类 ```java // 设置Trace ID到MDC MDCTraceUtils.putTraceId("trace-id"); // 获取当前Trace ID String traceId = MDCTraceUtils.getCurrentTraceId(); // 清理MDC MDCTraceUtils.clearTraceId(); // 批量设置Trace上下文 MDCTraceUtils.putTraceContext(traceContext); ``` ## 🧪 测试 运行单元测试: ```bash mvn test ``` 运行性能测试: ```bash mvn test -Pbenchmark ``` 生成测试报告: ```bash mvn jacoco:report ``` ## 📈 性能指标 - **生成时间**: 平均约5微秒 - **QPS**: 100,000+ - **内存占用**: 每个线程 < 1KB - **成功率**: 99.99%+ ## 🔄 版本兼容性 | Spring Boot版本 | 支持状态 | 推荐版本 | |------------------|----------|----------| | 2.7.x - 2.7.x | ✅ 完全支持 | 2.7.18 | | 3.0.x - 3.2.x | ✅ 完全支持 | 3.2.1 | | Java版本 | 支持状态 | 推荐版本 | |----------|----------|----------| | Java 8 | ✅ 完全支持 | 8u381+ | | Java 11 | ✅ 完全支持 | 11.0.23+ | | Java 17 | ✅ 完全支持 | 17.0.11+ | ## 🏗️ 架构设计 ``` ┌─────────────────────────────────────────────────────────┐ │ 应用层 (Application Layer) │ ├─────────────────────────────────────────────────────────┤ │ Spring MVC/WebFlux │ Feign Client │ RestTemplate │ ├─────────────────────────────────────────────────────────┤ │ 集成层 (Integration Layer) │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │ │ │ TraceFilter │ │ Interceptor │ │ TaskDecorator │ │ │ └─────────────┘ └─────────────┘ └─────────────────────┘ │ ├─────────────────────────────────────────────────────────┤ │ 核心层 (Core Layer) │ │ ┌─────────────────┐ ┌─────────────────────────────────┐ │ │ │ TraceIdGenerator│ │ TraceContext │ │ │ └─────────────────┘ └─────────────────────────────────┘ │ ├─────────────────────────────────────────────────────────┤ │ 工具层 (Utility Layer) │ │ ┌─────────────────┐ ┌─────────────────────────────────┐ │ │ │ MDCTraceUtils │ │ TransmittableThreadLocal │ │ │ └─────────────────┘ └─────────────────────────────────┘ │ └─────────────────────────────────────────────────────────┘ ``` ## 🐛 故障排查 ### 常见问题 **Q: Trace ID没有在日志中显示?** A: 检查以下几点: 1. 确保`trace.enabled=true` 2. 检查MDC配置:`logging.pattern.console`包含`%X{traceId}` 3. 确保使用了正确的日志框架(Logback/Log4j2) **Q: 跨服务调用时Trace ID丢失?** A: 确保: 1. 客户端启用了对应的拦截器(Feign/RestTemplate) 2. 服务端正确接收请求头 3. 没有被中间件或网关过滤掉Header **Q: 异步任务中Trace ID丢失?** A: 检查: 1. `trace.async-enabled=true` 2. 使用了正确的`TaskExecutor`配置 3. 异步方法调用了正确的上下文传递机制 ### 调试模式 启用调试日志: ```yaml logging: level: com.trace: DEBUG ``` ## 🤝 贡献 欢迎提交Issue和Pull Request! 1. Fork 项目 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 打开Pull Request ## 📄 许可证 本项目采用 Apache License 2.0 许可证。详情请参阅 [LICENSE](LICENSE) 文件。 ## 🙏 致谢 感谢以下开源项目的启发: - [TransmittableThreadLocal](https://github.com/alibaba/transmittable-thread-local) - [Spring Boot](https://github.com/spring-projects/spring-boot) - [Slf4j](https://www.slf4j.org/) ## 📞 联系我们 - 项目主页:https://github.com/trace/trace-id-spring-boot-starter - 问题反馈:https://github.com/trace/trace-id-spring-boot-starter/issues - 邮箱:team@trace.com --- **让链路追踪变得简单而高效!** 🚀