Files
game_server/docs/logging_optimization_summary.md
zyh 53d6de47dc refactor: 优化设备状态检查服务和定时任务日志输出
主要修改:
1. 将设备状态检查服务中的INFO级别日志调整为DEBUG级别,以减少日志冗余。
2. 更新定时检查空闲设备的日志输出,简化信息并保持DEBUG级别。
3. 仅在发现需要更新的任务时输出INFO级别日志,提升日志的可读性和有效性。

技术细节:
- 通过调整日志级别,增强了系统的调试能力,同时保持了必要的信息输出。
2025-08-27 16:04:57 +08:00

159 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 日志优化总结
## 🎯 优化目标
减少不必要的日志输出,只在有实际数据库更新操作时才输出重要信息,避免日志过于冗余。
## 📝 优化前的问题
当设备空闲但没有需要更新的链接任务时系统仍会输出大量INFO级别的日志
```
2025-08-27 15:59:43.427 INFO 27180 --- [ scheduling-1] c.g.s.s.device.DeviceStatusCheckService : 设备ID: gg8, 检查原因: 定时检查
2025-08-27 15:59:43.481 INFO 27180 --- [ scheduling-1] c.g.s.s.device.DeviceStatusCheckService : 设备状态解析结果: DeviceStatusInfo{status='空闲', points=null, idle=true}
2025-08-27 15:59:43.481 INFO 27180 --- [ scheduling-1] c.g.s.s.device.DeviceStatusCheckService : 设备 gg8 处于空闲状态,检查相关链接任务
2025-08-27 15:59:43.484 INFO 27180 --- [ scheduling-1] c.g.s.s.device.DeviceStatusCheckService : 设备 gg8 没有处于LOGGED_IN状态的链接任务
2025-08-27 15:59:43.484 INFO 27180 --- [ scheduling-1] c.g.s.s.device.DeviceStatusCheckService : === 设备状态检查完成 ===
```
## ✅ 优化后的改进
### **1. 日志级别调整**
#### **DeviceStatusCheckService.java**
- ✅ 将常规检查日志从 `INFO` 调整为 `DEBUG`
- ✅ 只有在找到需要更新的任务时才输出 `INFO` 日志
- ✅ 移除了冗余的开始/结束标记
**优化前**:
```java
log.info("设备ID: {}, 检查原因: {}", machineId, reason);
log.info("设备状态解析结果: {}", statusInfo);
log.info("设备 {} 处于空闲状态,检查相关链接任务", machineId);
log.info("设备 {} 没有处于LOGGED_IN状态的链接任务", machineId);
log.info("=== 设备状态检查完成 ===");
```
**优化后**:
```java
log.debug("检查设备状态: 设备ID={}, 检查原因={}", machineId, reason);
log.debug("设备 {} 状态解析结果: {}", machineId, statusInfo);
log.debug("设备 {} 没有处于LOGGED_IN状态的链接任务无需更新", machineId);
// 只有找到需要更新的任务时才输出INFO日志
log.info("设备 {} 处于空闲状态,发现 {} 个LOGGED_IN状态的链接任务开始更新为完成状态", machineId, loggedInTasks.size());
```
#### **DeviceStatusCheckTask.java**
- ✅ 将定时任务的常规执行日志调整为 `DEBUG`
- ✅ 简化了开始/结束日志
**优化前**:
```java
log.debug("=== 开始定时检查空闲设备 ===");
log.info("发现 {} 个空闲设备: {}", availableDevices.size(), availableDevices);
log.debug("=== 定时检查空闲设备完成 ===");
```
**优化后**:
```java
log.debug("开始定时检查空闲设备");
log.debug("发现 {} 个空闲设备: {}", availableDevices.size(), availableDevices);
log.debug("定时检查空闲设备完成");
```
### **2. 保留的重要日志**
以下日志仍然保持 `INFO` 或更高级别,确保重要操作可追踪:
-**数据库更新操作**: 当真正更新链接任务状态时
-**异常情况**: 获取设备状态失败、更新失败等
-**关键业务操作**: 链接任务完成标记
```java
// 重要操作日志 - 保持INFO级别
log.info("设备 {} 处于空闲状态,发现 {} 个LOGGED_IN状态的链接任务开始更新为完成状态", machineId, loggedInTasks.size());
log.info("链接任务 {} (代码: {}) 已标记为完成,完成点数: {}", task.getId(), task.getCodeNo(), points);
// 异常日志 - 保持WARN/ERROR级别
log.warn("获取设备状态失败设备ID: {}", machineId);
log.error("检查设备状态时发生异常设备ID: {}", machineId, e);
```
## 📊 优化效果
### **场景1: 无需更新时(常见场景)**
**优化前**: 5行INFO日志 + SQL查询日志
**优化后**: 仅DEBUG日志生产环境基本无输出
### **场景2: 有任务更新时(关键场景)**
**优化前**: 5行INFO日志 + 更新日志
**优化后**: 2-3行INFO日志突出重要操作
### **日志输出对比**
#### **优化前(无更新场景)**:
```
INFO - 设备ID: gg8, 检查原因: 定时检查
DEBUG - 获取设备状态: 设备=gg8, url=...
DEBUG - 解析设备 gg8 的状态信息
DEBUG - 设备 gg8 状态解析完成: {...}
DEBUG - 获取设备状态成功: 设备=gg8, 状态={...}
INFO - 设备状态解析结果: DeviceStatusInfo{...}
INFO - 设备 gg8 处于空闲状态,检查相关链接任务
INFO - 设备 gg8 没有处于LOGGED_IN状态的链接任务
INFO - === 设备状态检查完成 ===
```
#### **优化后(无更新场景)**:
```
DEBUG - 检查设备状态: 设备ID=gg8, 检查原因=定时检查
DEBUG - 获取设备状态: 设备=gg8, url=...
DEBUG - 解析设备 gg8 的状态信息
DEBUG - 设备 gg8 状态解析完成: {...}
DEBUG - 获取设备状态成功: 设备=gg8, 状态={...}
DEBUG - 设备 gg8 状态解析结果: DeviceStatusInfo{...}
DEBUG - 设备 gg8 没有处于LOGGED_IN状态的链接任务无需更新
```
#### **优化后(有更新场景)**:
```
DEBUG - 检查设备状态: 设备ID=gg8, 检查原因=定时检查
... (DEBUG日志) ...
INFO - 设备 gg8 处于空闲状态,发现 2 个LOGGED_IN状态的链接任务开始更新为完成状态
INFO - 链接任务 123 (代码: ABC001) 已标记为完成,完成点数: 900
INFO - 链接任务 124 (代码: ABC002) 已标记为完成,完成点数: 900
```
## 🔧 配置建议
### **生产环境日志级别配置**
```properties
# 应用整体日志级别
logging.level.root=INFO
# 设备检查相关服务 - 只显示重要操作
logging.level.com.gameplatform.server.service.device=INFO
logging.level.com.gameplatform.server.task=INFO
# 外部服务调用 - 减少噪音
logging.level.com.gameplatform.server.service.external=WARN
```
### **开发环境调试配置**
```properties
# 开发环境可以开启DEBUG查看详细流程
logging.level.com.gameplatform.server.service.device=DEBUG
logging.level.com.gameplatform.server.service.external=DEBUG
```
## 🎉 总结
通过这次优化:
1. **减少日志噪音**: 常规检查不再产生大量INFO日志
2. **突出重要操作**: 真正的业务操作(数据库更新)更加醒目
3. **保持可调试性**: 通过DEBUG级别仍可查看详细执行流程
4. **提升性能**: 减少不必要的日志I/O操作
现在系统在正常运行时会保持相对安静,只有在真正进行游戏完成检测和状态更新时才会输出关键信息!🚀