生鲜软件日志记录最佳实践
1. 日志级别设计
- DEBUG:记录详细操作流程,如订单状态变更细节
- INFO:记录关键业务操作,如用户下单、支付成功
- WARN:记录潜在问题,如库存不足预警
- ERROR:记录系统错误,如数据库连接失败
- FATAL:记录致命错误,如支付接口不可用
2. 核心日志字段
```json
{
"timestamp": "2023-11-15T14:30:45Z",
"level": "ERROR",
"service": "order-service",
"trace_id": "abc123xyz456",
"user_id": "user_789",
"message": "库存不足,商品SKU: PROD_001",
"details": {
"requested_quantity": 5,
"available_stock": 3,
"warehouse_id": "WH_001"
},
"stack_trace": "..."
}
```
3. 生鲜业务特有日志点
- 库存变更:记录入库、出库、盘点操作
- 冷链监控:记录温度异常事件
- 保质期预警:记录临近过期商品
- 配送异常:记录延迟、路线变更等
万象源码部署问题排查方案
1. 部署前检查清单
- [ ] 环境一致性验证(JDK版本、中间件版本)
- [ ] 配置文件差异化分析(dev/test/prod)
- [ ] 数据库迁移脚本验证
- [ ] 依赖项完整性检查(Maven/Gradle依赖)
2. 常见部署问题及解决方案
问题1:服务启动失败
排查步骤:
1. 检查日志文件(通常位于`/var/log/wanxiang/`或项目`logs/`目录)
2. 查看堆栈信息定位错误类
3. 常见原因:
- 数据库连接配置错误
- 端口冲突
- 许可证过期
- 内存不足
解决方案:
```bash
查看最近100行日志
tail -n 100 /var/log/wanxiang/application.log
实时查看日志
tail -f /var/log/wanxiang/application.log
检查端口占用
netstat -tulnp | grep <端口号>
```
问题2:接口响应慢
排查步骤:
1. 启用APM工具(如SkyWalking、Prometheus)
2. 检查慢查询日志
3. 分析线程转储
优化建议:
```java
// 示例:添加慢操作日志
long startTime = System.currentTimeMillis();
// 业务操作...
long duration = System.currentTimeMillis() - startTime;
if(duration > 1000) { // 超过1秒记录
log.warn("Slow operation detected: {}ms", duration);
}
```
问题3:分布式事务问题
排查方法:
1. 检查Seata或XA事务日志
2. 验证事务分组配置
3. 检查网络分区情况
3. 高级排查工具
- Arthas:实时诊断Java应用
```bash
启动Arthas
java -jar arthas-boot.jar
常用命令
dashboard 查看系统概况
thread 分析线程
trace 跟踪方法调用
```
- JProfiler/VisualVM:性能分析
- ELK Stack:集中式日志管理
```
生鲜应用日志 → Filebeat → Logstash → Elasticsearch → Kibana
```
实施建议
1. 标准化日志格式:采用JSON格式便于机器处理
2. 日志分级存储:
- 实时日志:最近7天
- 归档日志:按月份存储
3. 告警机制:
- ERROR级别日志实时告警
- 业务指标异常告警(如订单成功率下降)
4. 部署回滚方案:
- 蓝绿部署或金丝雀发布
- 自动化回滚脚本
示例日志配置(Logback)
```xml
logs/application.log
logs/application.%d{yyyy-MM-dd}.log
30
{"timestamp":"%d{ISO8601}","level":"%level","service":"生鲜系统","thread":"%thread","message":"%msg","stack_trace":"%ex{full}"}%n
```
通过实施上述方案,可以显著提高生鲜软件系统的可观测性,在万象源码部署过程中快速定位和解决问题,确保系统稳定运行。