|
|
2 mesiacov pred | |
|---|---|---|
| k8s | 2 mesiacov pred | |
| shop-recycle-common | 2 mesiacov pred | |
| shop-recycle-gateway | 2 mesiacov pred | |
| shop-recycle-order-service | 2 mesiacov pred | |
| shop-recycle-payment-service | 2 mesiacov pred | |
| shop-recycle-web | 2 mesiacov pred | |
| .dockerignore | 2 mesiacov pred | |
| .gitignore | 2 mesiacov pred | |
| Dockerfile.multiarch | 2 mesiacov pred | |
| Jenkinsfile | 2 mesiacov pred | |
| Jenkinsfile.optimized | 2 mesiacov pred | |
| README.md | 2 mesiacov pred | |
| build-docker-optimized.ps1 | 2 mesiacov pred | |
| build-docker-optimized.sh | 2 mesiacov pred | |
| build-docker-optimized.sh.backup | 2 mesiacov pred | |
| build-docker.ps1 | 2 mesiacov pred | |
| build-docker.sh | 2 mesiacov pred | |
| configmap-vector.bak | 2 mesiacov pred | |
| docker-compose.yml | 2 mesiacov pred | |
| init-dependencies.ps1 | 2 mesiacov pred | |
| init-dependencies.sh | 2 mesiacov pred | |
| k8s-rendered.yaml | 2 mesiacov pred | |
| nohup.out | 2 mesiacov pred | |
| pom.xml | 2 mesiacov pred | |
| start.ps1 | 2 mesiacov pred | |
| start.sh | 2 mesiacov pred | |
| verify-build.sh | 2 mesiacov pred | |
| web-log-generator-simple.sh | 2 mesiacov pred |
完整的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)
前置条件:
构建项目:
cd spring-cloud-log-demo
mvn clean install
快速命令 - 启动所有服务 (Windows PowerShell):
.\start.ps1
或 Linux/Mac:
chmod +x start.sh && ./start.sh
一句命令生成50个订单,观看日志:
curl http://localhost:8080/api/test/order/batch?count=50
在后端Terminal中立即看到类似的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"
}
访问 http://localhost:5173,点击按钮一键生成数据。
每个请求都会生成以下格式的结构化日志:
{
"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 |
场景1: 创建订单
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: 删除订单
curl -X POST http://localhost:8080/api/order/delete/ORD-XXXXXXXX
场景3: 支付订单
curl -X POST http://localhost:8080/api/payment/pay \
-H "Content-Type: application/json" \
-d '{
"orderId":"ORD-XXXXXXXX",
"amount":99.99,
"paymentMethod":"WECHAT"
}'
场景4: 退款
curl -X POST http://localhost:8080/api/payment/refund/PAY-XXXXXXXX
✅ 自动MDC注入 - LoggingMdcInterceptor自动填充:
✅ 异步日志输出 - AsyncAppender确保业务不阻塞
✅ JSON结构化输出 - LogstashEncoder生成可被Loki/ELK解析的JSON
✅ 零业务代码侵入 - 拦截器层统一处理,业务代码无需改动
查看所有订单相关日志:
grep "event_class.*order" logs/app.log | jq .
查看失败请求:
grep "status.*error" logs/app.log | jq '.[] | {uri_group, error, duration}'
P95延迟分析:
grep "duration" logs/app.log | jq '.duration' | sort -n | tail -5
订单QPS (Loki LogQL):
sum by (uri_group) (rate({app="shop-recycle-order-service", event_class="order"}[1m]))
错误率告警 (Prometheus):
(rate(requests_total{status="error"}[5m]) / rate(requests_total[5m])) > 0.05
构建Gateway镜像:
cd shop-recycle-gateway
mvn clean package docker:build
启动容器:
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%的失败率用于测试异常处理
重新尝试支付请求即可
MIT License