在项目根目录运行:
.\start.ps1
或 Linux/Mac:
chmod +x start.sh && ./start.sh
在项目根目录运行:
.\start.ps1
或者手动启动:
Terminal 1 - API Gateway:
cd spring-cloud-log-demo
mvn clean install
cd shop-recycle-gateway
mvn spring-boot:run
Terminal 2 - Order Service:
cd spring-cloud-log-demo/shop-recycle-order-service
mvn spring-boot:run
Terminal 3 - Payment Service:
cd spring-cloud-log-demo/shop-recycle-payment-service
mvn spring-boot:run
Terminal 4 - Frontend:
cd spring-cloud-log-demo/shop-recycle-web
npm install
npm run dev
打开浏览器访问 http://localhost:5173
你会看到两个标签页:
在"订单管理"标签页中:
用户ID: user123订单金额: 99.99描述: test order预期结果:
json
{
"ts":"2024-02-06T10:30:45.123Z",
"level":"INFO",
"msg":"订单已创建 orderId=ORD-XXXXX",
"traceId":"550e8400-e29b-41d4-a716-446655440000",
"uri":"/api/order/create",
"uri_group":"/order/*",
"event_class":"order",
"status":"success",
"duration":"145"
}
在"支付管理"标签页中:
订单ID: 复制上一步的 orderId金额: 99.99支付方式: 微信/支付宝/银行卡预期结果:
观察三个服务的Terminal输出,你会看到:
关键字段解析:
| 字段 | 含义 | 示例 |
|---|---|---|
traceId |
全链路追踪ID | 550e8400-e29b-41d4 |
uri_group |
规范化URL分组 | /order/*, /payment/* |
event_class |
业务事件分类 | order, payment |
duration |
请求耗时(毫秒) | 145 |
status |
请求状态 | success, client_error, server_error |
app |
应用名 | shop-recycle-order-service |
env |
环境 | local |
不想用UI?一行命令生成100条订单!
# 生成1条随机订单
curl http://localhost:8080/api/test/order
# 生成10条订单
curl http://localhost:8080/api/test/order/batch?count=10
# 生成50条订单
curl http://localhost:8080/api/test/order/batch?count=50
# 生成100条订单 (大量日志测试)
curl http://localhost:8080/api/test/order/batch?count=100
# 进行10秒压力测试,观察QPS
curl http://localhost:8080/api/test/order/stress?duration=10
# 生成10笔支付
curl http://localhost:8080/api/test/payment/batch?count=10
# 支付场景测试:支付 + 退款
curl "http://localhost:8080/api/test/payment/refund?count=5"
#!/bin/bash
# save as: run-batch-test.sh
echo "🚀 开始批量生成模拟数据..."
echo ""
echo "📦 生成50个订单..."
curl -s http://localhost:8080/api/test/order/batch?count=50 | jq '.data | {total, success, error, duration}'
echo ""
echo "💰 生成30笔支付..."
curl -s http://localhost:8080/api/test/payment/batch?count=30 | jq '.data | {total, success, error, totalAmount, duration}'
echo ""
echo "📊 场景测试(10轮)..."
curl -s http://localhost:8080/api/test/order/scenario?count=10 | jq '.data'
echo ""
echo "⚡ 压力测试(10秒)..."
curl -s http://localhost:8080/api/test/order/stress?duration=10 | jq '.data | {requests, success, error, qps, duration}'
echo ""
echo "✅ 完成!现在检查后端Terminal的JSON日志输出"
运行:
chmod +x run-batch-test.sh
./run-batch-test.sh
# save as: run-batch-test.ps1
Write-Host "🚀 批量生成模拟数据" -ForegroundColor Cyan
Write-Host ""
Write-Host "📦 生成50个订单..." -ForegroundColor Yellow
(Invoke-WebRequest -Uri "http://localhost:8080/api/test/order/batch?count=50").Content | ConvertFrom-Json | ForEach-Object { $_.data }
Write-Host ""
Write-Host "💰 生成30笔支付..." -ForegroundColor Yellow
(Invoke-WebRequest -Uri "http://localhost:8080/api/test/payment/batch?count=30").Content | ConvertFrom-Json | ForEach-Object { $_.data }
Write-Host ""
Write-Host "✅ 完成!" -ForegroundColor Green
Write-Host "查看后端Terminal窗口的JSON日志输出"
运行:
.\run-batch-test.ps1
| API | 说明 |
|---|---|
GET /api/test/order |
生成1个订单 |
GET /api/test/order/batch?count=N |
生成N个订单 |
GET /api/test/order/scenario?count=N |
N轮业务场景测试 |
GET /api/test/order/stress?duration=10 |
10秒压力测试 |
GET /api/test/payment |
生成1笔支付 |
GET /api/test/payment/batch?count=N |
生成N笔支付 |
GET /api/test/payment/refund?count=N |
N轮支付+退款测试 |
GET /api/test/payment/stress?duration=10 |
支付压力测试 |
订单创建日志:
{
"ts":"2024-02-06T10:30:45.123Z",
"level":"INFO",
"logger":"com.shop.recycle.order.service.OrderService",
"msg":"订单已创建 orderId=ORD-A1B2C3D4",
"traceId":"abc-123-def-456",
"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"
}
日志中的关键观察:
检查清单:
□ 后端服务是否全部启动 (查看Terminal有没有"Started XXXApplication")
□ 端口是否被占用: netstat -ano | findstr :8080 (Windows)
□ 防火墙是否阻止本地连接
□ 前端proxy配置是否正确 (vite.config.js)
检查清单:
□ logback-spring.xml是否加载成功
□ logging.level是否配置为DEBUG
□ Spring Boot是否成功启动(查看Terminal最后一行)
□ 是否有异常堆栈信息
这是正常现象! Payment Service有30%的失败率用于测试。
多次点击"支付"按钮即可成功(70%成功率)。
解决方案:
1. 确认后端API Gateway启动成功 (port 8080)
2. 清除浏览器缓存 (Ctrl+Shift+Delete)
3. 检查vite.config.js中proxy配置
4. 查看浏览器开发者工具 (F12) 的Network标签
在生产环境中,你可以配置Vector采集日志到Loki:
# vector.toml配置示例
[sources.app_logs]
type = "file"
include = ["/var/log/app/*.log"]
[transforms.parse_json]
type = "remap"
inputs = ["app_logs"]
source = "parsed = parse_json!(.message)"
[sinks.loki]
type = "loki"
inputs = ["parse_json"]
endpoint = "http://loki:3100"
labels.app = "{{ app }}"
labels.event_class = "{{ event_class }}"
Vector会自动导出Prometheus metrics:
# QPS查询 (Prometheus)
rate(shop_recycle_requests_total[1m])
# 订单成功率
rate(shop_recycle_orders_total - shop_recycle_orders_failed_total[1m])
/
rate(shop_recycle_orders_total[1m])
# P95延迟
histogram_quantile(0.95, rate(shop_recycle_request_duration_ms_bucket[5m]))
在开始测试前,确保你能看到以下迹象:
一旦都满足,说明你的日志系统已经准备好测试!
需要帮助? 查看 README.md 获取完整文档