Files
GPA_Monitoring/修复说明_2026-01-22_重复日志和自动重登录.md
ChuXun d1dc08a16d 1
2026-01-29 03:39:01 +08:00

95 lines
2.7 KiB
Markdown
Raw 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.
# 修复说明 - 2026年1月22日
## 修复的问题
### 1. 日志重复输出问题
**现象**:每条日志都会输出两次
**原因**`logging.basicConfig()` 配置会在模块每次被导入时重复添加处理器,导致日志重复输出。
**解决方案**
- 使用 `if not logger.handlers:` 检查,确保处理器只被添加一次
- 设置 `logger.propagate = False` 防止日志传播到根记录器
- 使用显式的logger配置替代 `basicConfig`
### 2. 连续异常时自动重新登录
**现象**:当连续多次出现解析失败、获取页面失败或网络错误时,程序不会尝试重新登录,导致持续失败。
**解决方案**
在以下场景达到3次连续失败时自动触发重新登录
1. **获取成绩页面失败**
- 连续3次失败 → 尝试重新登录
- 登录成功 → 重置错误计数,继续监控
- 登录失败 → 继续累积错误计数
2. **网络错误(页面过短)**
- 连续3次网络错误 → 尝试重新登录
- 登录成功 → 重置错误计数
- 登录失败 → 继续累积错误计数
3. **解析课程失败0门课程**
- 连续3次解析失败 → 尝试重新登录
- 登录成功 → 重置错误计数
- 登录失败 → 发送通知,可能需要人工介入
## 技术细节
### 日志配置改进
```python
# 旧代码
logging.basicConfig(...)
logger = logging.getLogger(__name__)
# 新代码
logger = logging.getLogger(__name__)
if not logger.handlers:
# 配置处理器
logger.propagate = False
```
### 重新登录逻辑
```python
if consecutive_errors >= 3:
logger.warning("⚠️ 尝试重新登录以解决问题...")
if self.login():
logger.info("✓ 重新登录成功,重置错误计数")
consecutive_errors = 0
continue
else:
logger.error("✗ 重新登录失败")
```
## 使用建议
1. **重启服务**:修改后需要重启服务使改动生效
```bash
sudo systemctl restart grade-monitor
```
2. **查看日志**:确认日志不再重复
```bash
sudo journalctl -u grade-monitor -f
# 或
tail -f monitor.log
```
3. **监控效果**
- 日志应该只输出一次
- 连续3次异常会自动尝试重新登录
- 重新登录成功后会显示 "✓ 重新登录成功"
## 预期效果
- ✅ 日志不再重复输出
- ✅ 连续3次异常自动重新登录
- ✅ 重新登录成功后重置错误计数
- ✅ 减少因登录会话过期导致的持续失败
- ✅ 更好的容错性和自愈能力
## 注意事项
- 重新登录会记录在日志中,便于追踪
- 如果重新登录失败,仍会继续累积错误计数
- 达到5次最大连续错误后会发送邮件通知