1
This commit is contained in:
94
修复说明_2026-01-22_重复日志和自动重登录.md
Normal file
94
修复说明_2026-01-22_重复日志和自动重登录.md
Normal file
@@ -0,0 +1,94 @@
|
||||
# 修复说明 - 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次最大连续错误后会发送邮件通知
|
||||
Reference in New Issue
Block a user