完整的 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忽略配置
traceId、uri_group、event_class、duration 等关键字段cd spring-cloud-log-demo
.\start.ps1
脚本会自动启动所有服务并打开前端。
cd spring-cloud-log-demo
chmod +x start.sh
./start.sh
# 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
{
"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"
}
{
"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"
}
# docker-compose.yml中添加
loki:
image: grafana/loki:latest
ports:
- "3100:3100"
# actuator/prometheus 已内置支持
# 在docker-compose中添加Prometheus
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
# docker-compose中添加Grafana
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
# Add Loki as datasource: http://loki:3100
# 所有订单相关请求
{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)
示例:
@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字段:
MDC.put("custom_field", "value");
// 会自动显示在JSON日志中
编辑 logback-spring.xml 中的pattern部分:
<pattern>
{
"ts":"%d{...}",
"level":"%level",
...
"custom_field":"%X{custom_field:-}"
}
</pattern>
启动前检查:
启动后检查:
A: Payment Service有30%的失败率用于测试。多次尝试即可成功。
A: 检查 logback-spring.xml 是否正确加载,查看Terminal有没有启动报错。
A: 修改 application.yml 中的 server.port 配置,或kill占用端口的进程。
A: 检查所有后端服务都启动成功,查看浏览器控制台 F12 看有没有CORS错误。
这个项目演示了:
mvn clean install
mvn spring-boot:run (各服务)
npm run dev (前端)
docker-compose up -d
# 访问 http://localhost:5173
# 使用 Dockerfile 构建镜像
docker build -t order-service:1.0 shop-recycle-order-service
# 推送到镜像仓库
# kubectl apply -f k8s-manifests/
集成真实日志系统
添加链路追踪
扩展业务功能
完善测试
生产部署
现在你已经拥有一个完整的、生产级别的日志测试系统! 🎉
开始使用: .\start.ps1 (Windows) 或 ./start.sh (Linux/Mac)
有问题? 查看 QUICK_START.md 或 ARCHITECTURE.md