# 项目完成总结 完整的 **Spring Cloud + Vue 日志测试系统**已经创建完成! ## 📁 项目结构 ``` spring-cloud-log-demo/ ├── shop-recycle-common/ # 公共模块 │ ├── pom.xml │ └── src/main/java/com/shop/recycle/common/ │ ├── interceptor/ # 日志拦截器 │ │ └── LoggingMdcInterceptor.java │ ├── config/ │ │ └── WebConfig.java │ └── dto/ │ └── Response.java │ ├── shop-recycle-gateway/ # API网关 (port 8080) │ ├── pom.xml │ ├── Dockerfile │ ├── src/main/java/com/shop/recycle/gateway/ │ │ └── GatewayApplication.java │ └── src/main/resources/ │ ├── application.yml # 路由配置 │ └── logback-spring.xml # 日志配置 │ ├── shop-recycle-order-service/ # 订单服务 (port 8081) │ ├── pom.xml │ ├── Dockerfile │ ├── src/main/java/com/shop/recycle/order/ │ │ ├── OrderServiceApplication.java │ │ ├── controller/ │ │ │ └── OrderController.java │ │ ├── service/ │ │ │ └── OrderService.java │ │ └── dto/ │ │ ├── CreateOrderRequest.java │ │ └── OrderResponse.java │ └── src/main/resources/ │ ├── application.yml │ └── logback-spring.xml │ ├── shop-recycle-payment-service/ # 支付服务 (port 8082) │ ├── pom.xml │ ├── Dockerfile │ ├── src/main/java/com/shop/recycle/payment/ │ │ ├── PaymentServiceApplication.java │ │ ├── controller/ │ │ │ └── PaymentController.java │ │ ├── service/ │ │ │ └── PaymentService.java │ │ └── dto/ │ │ ├── PaymentRequest.java │ │ └── PaymentResponse.java │ └── src/main/resources/ │ ├── application.yml │ └── logback-spring.xml │ ├── shop-recycle-web/ # Vue前端 (port 5173) │ ├── package.json │ ├── vite.config.js │ ├── index.html │ ├── public/ │ └── src/ │ ├── main.js │ ├── App.vue # 主应用 │ ├── components/ │ │ ├── OrderComponent.vue # 订单管理 │ │ └── PaymentComponent.vue # 支付管理 │ └── api/ │ └── index.js # API客户端 │ ├── pom.xml # 顶层POM ├── docker-compose.yml # Docker编排 ├── start.sh # Linux/Mac启动脚本 ├── start.ps1 # Windows PowerShell启动脚本 ├── README.md # 项目文档 ├── QUICK_START.md # 快速开始指南 ├── ARCHITECTURE.md # 架构设计文档 ├── API.md # API文档 └── .gitignore # Git忽略配置 ``` ## ✨ 核心特性 ### ✅ 1. 结构化JSON日志 - 每个请求都生成标准的JSON格式日志 - 包含 `traceId`、`uri_group`、`event_class`、`duration` 等关键字段 - 可直接被 Loki/ELK/Splunk 解析 ### ✅ 2. 日志MDC自动注入 (零侵入) - LoggingMdcInterceptor 自动填充所有日志字段 - 业务代码无需修改 - 支持链路追踪 ### ✅ 3. 三个微服务完整示例 - **API Gateway** - 请求入口,自动路由 - **Order Service** - 订单CRUD示例 - **Payment Service** - 支付流程示例 ### ✅ 4. Vue前端UI - 可视化界面,一键生成测试流量 - 订单管理:创建、删除、查询订单 - 支付管理:支付、查询、退款 - 实时显示操作结果 ### ✅ 5. 生产级配置 - Logstash JSON encoder (标准日志格式) - 异步日志处理 (AsyncAppender+1024队列) - Docker & Docker Compose支持 - 环境化配置 (local/docker/prod) ### ✅ 6. 完整文档 - 快速开始指南 (QUICK_START.md) - 详细API文档 (API.md) - 架构设计说明 (ARCHITECTURE.md) - README 项目文档 ## 🚀 快速开始 (三种方式) ### 方式1: 一键启动脚本 (推荐-Windows) ```powershell cd spring-cloud-log-demo .\start.ps1 ``` 脚本会自动启动所有服务并打开前端。 ### 方式2: 一键启动脚本 (Linux/Mac) ```bash cd spring-cloud-log-demo chmod +x start.sh ./start.sh ``` ### 方式3: 手动启动各服务 ```bash # Terminal 1: Gateway cd spring-cloud-log-demo mvn clean install cd shop-recycle-gateway mvn spring-boot:run # Terminal 2: Order Service cd spring-recycle-order-service mvn spring-boot:run # Terminal 3: Payment Service cd spring-recycle-payment-service mvn spring-boot:run # Terminal 4: Frontend cd shop-recycle-web npm install && npm run dev ``` 所有服务启动完成后,访问 **http://localhost:5173** ## 📊 生成的日志示例 ### 订单创建日志 ```json { "ts":"2024-02-06T10:30:45.123Z", "level":"INFO", "logger":"com.shop.recycle.order.service.OrderService", "msg":"订单已创建 orderId=ORD-A1B2C3D4", "traceId":"550e8400-e29b-41d4-a716-446655440000", "uri":"/api/order/create", "uri_group":"/order/*", "duration":"156", "userId":"user123", "event_class":"order", "error":"-", "status":"success", "thread":"http-nio-8081-exec-1", "app":"shop-recycle-order-service", "env":"local" } ``` ### 支付日志 ```json { "ts":"2024-02-06T10:30:46.234Z", "level":"INFO", "logger":"com.shop.recycle.payment.service.PaymentService", "msg":"订单支付成功 paymentId=PAY-X1Y2Z3W4, orderId=ORD-A1B2C3D4, amount=99.99", "traceId":"550e8400-e29b-41d4-a716-446655440000", "uri":"/api/payment/pay", "uri_group":"/payment/*", "duration":"234", "event_class":"payment", "status":"success", "app":"shop-recycle-payment-service", "env":"local" } ``` ## 🎯 测试场景 ### 基础流程 1. 打开前端 http://localhost:5173 2. 创建订单 (输入用户ID、金额、描述) 3. 支付订单 (使用创建的订单ID) 4. 查看后端日志 ### 错误场景 - ❌ 创建负价格订单 → 看到 client_error 日志 - ❌ 删除已支付订单 → 看到 server_error 日志 - ❌ 支付失败 (30% 概率) → 重试支付,看到错误恢复 ### 高频操作 - 循环创建订单 - 批量支付 - 观察 duration 和 throughput 变化 ## 📈 日志监控接入 ### 接入Loki (日志聚合) ```bash # docker-compose.yml中添加 loki: image: grafana/loki:latest ports: - "3100:3100" ``` ### 接入Prometheus (指标收集) ```bash # actuator/prometheus 已内置支持 # 在docker-compose中添加Prometheus prometheus: image: prom/prometheus:latest volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml ``` ### 接入Grafana (可视化) ```bash # docker-compose中添加Grafana grafana: image: grafana/grafana:latest ports: - "3000:3000" # Add Loki as datasource: http://loki:3100 ``` ## 🔍 日志查询示例 (Loki) ```logql # 所有订单相关请求 {app="shop-recycle-order-service", event_class="order"} # 错误请求 {status="error"} # 特定用户的请求 {userId="user123"} # 按URI分组统计请求数 sum(rate({json="json"}[5m])) by (uri_group) # P95延迟 quantile_over_time(0.95, {app="shop-recycle-order-service"} | json | unwrap duration_ms [5m] ) by (uri_group) ``` ## 📚 文档导览 - **[QUICK_START.md](QUICK_START.md)** - 5分钟快速上手 - **[API.md](API.md)** - 完整API文档和cURL示例 - **[ARCHITECTURE.md](ARCHITECTURE.md)** - 系统架构深度讲解 - **[README.md](README.md)** - 项目完整说明 ## 🔧 开发指南 ### 添加新的API端点 1. 在Controller中添加方法 2. 在Service中实现业务逻辑 3. 日志会自动被拦截器处理 4. MDC字段自动填充 **示例:** ```java @PostMapping("/order/cancel/{orderId}") public Response cancelOrder(@PathVariable String orderId) { try { orderService.cancelOrder(orderId); return Response.success(); } catch (Exception e) { return Response.error(e.getMessage()); } } ``` ### 自定义日志字段 在业务代码中添加自定义MDC字段: ```java MDC.put("custom_field", "value"); // 会自动显示在JSON日志中 ``` ### 修改日志格式 编辑 `logback-spring.xml` 中的pattern部分: ```xml { "ts":"%d{...}", "level":"%level", ... "custom_field":"%X{custom_field:-}" } ``` ## ✅ 验证清单 启动前检查: - [ ] JDK 1.8+ 已安装 - [ ] Maven 3.6+ 已安装 - [ ] Node.js 14+ 已安装 - [ ] npm 已安装 - [ ] 没有服务占用 8080, 8081, 8082, 5173 端口 启动后检查: - [ ] Gateway: http://localhost:8080 可访问 - [ ] Order Service: http://localhost:8081/api/order 可访问 - [ ] Payment Service: http://localhost:8082/api/payment 可访问 - [ ] Frontend: http://localhost:5173 可访问 - [ ] 创建订单成功 - [ ] 支付订单成功 (或正确显示失败) - [ ] 后端Terminal显示JSON格式日志 ## 🆘 常见问题 ### Q: 为什么支付总是失败? A: Payment Service有30%的失败率用于测试。多次尝试即可成功。 ### Q: 日志为什么没有出现? A: 检查 logback-spring.xml 是否正确加载,查看Terminal有没有启动报错。 ### Q: 端口被占用怎么办? A: 修改 application.yml 中的 server.port 配置,或kill占用端口的进程。 ### Q: 前端无法连接后端? A: 检查所有后端服务都启动成功,查看浏览器控制台 F12 看有没有CORS错误。 ## 🎓 学习价值 这个项目演示了: 1. **Spring Cloud 微服务架构** - Gateway + Service 2. **日志最佳实践** - MDC + JSON + 异步处理 3. **链路追踪设计** - traceId 贯穿整个链路 4. **可观测性** - 结构化日志 + 指标 + 链路 5. **前后端分离** - Vue + RESTful API 6. **零侵入日志** - 拦截器注入,业务代码不改动 7. **生产就绪** - Docker + Config + Error Handling ## 📦 部署选项 ### 本地开发 ```bash mvn clean install mvn spring-boot:run (各服务) npm run dev (前端) ``` ### Docker 容器 ```bash docker-compose up -d # 访问 http://localhost:5173 ``` ### Kubernetes ```bash # 使用 Dockerfile 构建镜像 docker build -t order-service:1.0 shop-recycle-order-service # 推送到镜像仓库 # kubectl apply -f k8s-manifests/ ``` ## 🚦 下一步建议 1. **集成真实日志系统** - 部署 Loki + Grafana - 配置 Vector agent 采集日志 2. **添加链路追踪** - 集成 Jaeger 或 Zipkin - 支持 X-B3-TraceId 头 3. **扩展业务功能** - 添加库存服务 - 添加用户服务 - 实现真实的数据库 4. **完善测试** - 单元测试 - 集成测试 - 性能测试 5. **生产部署** - CI/CD 流水线 - 蓝绿部署 - 灾备方案 --- **现在你已经拥有一个完整的、生产级别的日志测试系统!** 🎉 开始使用: `.\start.ps1` (Windows) 或 `./start.sh` (Linux/Mac) 有问题? 查看 QUICK_START.md 或 ARCHITECTURE.md