# Spring Cloud日志测试演示系统 完整的Spring Cloud + Vue前端日志系统,用于测试和演示结构化JSON日志的生成。 ## ✨ 核心特性 ✅ **无UI快速测试** - 一条命令生成100个订单,观看JSON日志 ✅ **结构化JSON日志** - 完全兼容Loki/ELK/Splunk的日志格式 ✅ **零侵入MDC** - 业务代码无需改动,拦截器自动注入日志字段 ✅ **前后端完整** - Vue UI + Spring Cloud Gateway + 微服务 ✅ **多种测试模式** - 单条、批量、场景、压力测试 ✅ **生产级配置** - Docker支持、日志异步处理、环境化配置 ## 📋 项目结构 ``` spring-cloud-log-demo/ ├── shop-recycle-common/ # 公共模块 (日志拦截器、DTO) ├── shop-recycle-gateway/ # API网关 (端口 8080) ├── shop-recycle-order-service/ # 订单服务 (端口 8081) ├── shop-recycle-payment-service/ # 支付服务 (端口 8082) └── shop-recycle-web/ # Vue前端 (端口 5173) ``` ## 🚀 快速开始 ### 1. 后端服务启动 **前置条件:** - JDK 1.8+ - Maven 3.6+ **构建项目:** ```bash cd spring-cloud-log-demo mvn clean install ``` **快速命令 - 启动所有服务 (Windows PowerShell):** ```powershell .\start.ps1 ``` 或 Linux/Mac: ```bash chmod +x start.sh && ./start.sh ``` ### 2. 快速测试 (无需UI!) **一句命令生成50个订单,观看日志:** ```bash curl http://localhost:8080/api/test/order/batch?count=50 ``` **在后端Terminal中立即看到类似的JSON日志:** ```json { "ts":"2024-02-06T10:30:45.123Z", "level":"INFO", "msg":"测试订单生成成功 orderId=ORD-A1B2C3D4", "traceId":"550e8400-e29b-41d4-a716", "uri_group":"/test/*", "event_class":"order", "status":"success", "duration":"145", "app":"shop-recycle-order-service" } ``` ### 3. 或使用前端UI 访问 `http://localhost:5173`,点击按钮一键生成数据。 ## 📚 详细文档 - **[QUICK_START.md](QUICK_START.md)** - 5分钟快速上手 ⭐ 新手必读 - **[BATCH_TEST_API.md](BATCH_TEST_API.md)** - 无UI批量测试API (一条命令test) - **[API.md](API.md)** - 完整API文档 - **[ARCHITECTURE.md](ARCHITECTURE.md)** - 系统架构设计 ## 日志观察 ### 生成的日志格式 (JSON) 每个请求都会生成以下格式的结构化日志: ```json { "ts":"2024-02-06T10:30:45.123Z", "level":"INFO", "logger":"com.shop.recycle.order.service.OrderService", "msg":"订单已创建 orderId=ORD-12345678", "traceId":"550e8400-e29b-41d4-a716-446655440000", "uri":"/api/order/create", "uri_group":"/order/*", "duration":"145", "userId":"user123", "event_class":"order", "error":"-", "status":"success", "thread":"http-nio-8081-exec-1", "app":"shop-recycle-order-service", "env":"local" } ``` ### 关键字段说明 | 字段 | 含义 | 示例 | |------|------|------| | `traceId` | 链路追踪ID | 550e8400-e29b-41d4 | | `uri_group` | 规范化URI分组 | /order/* | | `event_class` | 业务事件分类 | order, payment | | `duration` | 请求耗时(ms) | 145 | | `status` | 请求状态 | success, client_error, server_error | | `app` | 应用名 | shop-recycle-order-service | | `env` | 环境标识 | local, dev, prod | ## 🧪 Testing Scenarios 测试场景 ### Order Service 订单服务 **场景1: 创建订单** ```bash curl -X POST http://localhost:8080/api/order/create \ -H "Content-Type: application/json" \ -H "X-User-Id: user001" \ -d '{ "userId":"user001", "price":99.99, "description":"test order" }' ``` **场景2: 删除订单** ```bash curl -X POST http://localhost:8080/api/order/delete/ORD-XXXXXXXX ``` ### Payment Service 支付服务 **场景3: 支付订单** ```bash curl -X POST http://localhost:8080/api/payment/pay \ -H "Content-Type: application/json" \ -d '{ "orderId":"ORD-XXXXXXXX", "amount":99.99, "paymentMethod":"WECHAT" }' ``` **场景4: 退款** ```bash curl -X POST http://localhost:8080/api/payment/refund/PAY-XXXXXXXX ``` ## 📝 实现的日志功能 ✅ **自动MDC注入** - LoggingMdcInterceptor自动填充: - traceId (链路追踪) - uri / uri_group (URL规范化) - event_class (事件分类) - duration (请求耗时) - status (HTTP状态) ✅ **异步日志输出** - AsyncAppender确保业务不阻塞 ✅ **JSON结构化输出** - LogstashEncoder生成可被Loki/ELK解析的JSON ✅ **零业务代码侵入** - 拦截器层统一处理,业务代码无需改动 ## 🔍 日志监控查询 ### 命令行查询示例 查看所有订单相关日志: ```bash grep "event_class.*order" logs/app.log | jq . ``` 查看失败请求: ```bash grep "status.*error" logs/app.log | jq '.[] | {uri_group, error, duration}' ``` P95延迟分析: ```bash grep "duration" logs/app.log | jq '.duration' | sort -n | tail -5 ``` ### 接入Loki/Grafana后的查询 订单QPS (Loki LogQL): ```logql sum by (uri_group) (rate({app="shop-recycle-order-service", event_class="order"}[1m])) ``` 错误率告警 (Prometheus): ```promql (rate(requests_total{status="error"}[5m]) / rate(requests_total[5m])) > 0.05 ``` ## 📦 打包部署 ### Docker部署 构建Gateway镜像: ```bash cd shop-recycle-gateway mvn clean package docker:build ``` 启动容器: ```bash docker run -d -p 8080:8080 \ -e SPRING_PROFILES_ACTIVE=prod \ shop-recycle-gateway:1.0.0 ``` ## 🔧 故障排查 **问题1: 前端无法连接后端** ``` 检查: 1. 所有后端服务是否启动 2. http://localhost:8080 是否可访问 3. 浏览器控制台是否有CORS错误 ``` **问题2: 日志未出现** ``` 1. 检查logback-spring.xml是否正确加载 2. 确认logging.level配置为DEBUG 3. 查看启动日志是否有错误 ``` **问题3: 支付服务报错** ``` Payment Service有30%的失败率用于测试异常处理 重新尝试支付请求即可 ``` ## 📚 相关资源 - [Spring Cloud官方文档](https://spring.io/cloud) - [Logstash Logback Encoder](https://github.com/logstash/logstash-logback-encoder) - [Loki日志聚合](https://grafana.com/oss/loki/) - [Vue 3文档](https://vuejs.org/) ## 许可证 MIT License