mirror of
https://github.com/zhinianboke/xianyu-auto-reply.git
synced 2025-08-02 20:47:35 +08:00
250 lines
7.8 KiB
Markdown
250 lines
7.8 KiB
Markdown
# 用户日志显示改进总结
|
||
|
||
## 🎯 改进目标
|
||
|
||
在多用户系统中,原有的日志无法识别具体的操作用户,导致调试和监控困难。本次改进为所有系统日志添加了当前登录用户的信息。
|
||
|
||
## 📊 改进内容
|
||
|
||
### 1. API请求/响应日志增强
|
||
|
||
#### 改进前
|
||
```
|
||
2025-07-25 15:40:28.714 | INFO | reply_server:log_requests:223 - 🌐 API请求: GET /keywords/执念小店70
|
||
2025-07-25 15:40:28.725 | INFO | reply_server:log_requests:228 - ✅ API响应: GET /keywords/执念小店70 - 200 (0.011s)
|
||
```
|
||
|
||
#### 改进后
|
||
```
|
||
2025-07-25 15:40:28.714 | INFO | reply_server:log_requests:223 - 🌐 【admin#1】 API请求: GET /keywords/执念小店70
|
||
2025-07-25 15:40:28.725 | INFO | reply_server:log_requests:228 - ✅ 【admin#1】 API响应: GET /keywords/执念小店70 - 200 (0.011s)
|
||
```
|
||
|
||
### 2. 业务操作日志增强
|
||
|
||
#### 用户认证相关
|
||
- ✅ 登录尝试: `【username】尝试登录`
|
||
- ✅ 登录成功: `【username#user_id】登录成功`
|
||
- ✅ 登录失败: `【username】登录失败: 用户名或密码错误`
|
||
- ✅ 注册操作: `【username】尝试注册,邮箱: email`
|
||
|
||
#### Cookie管理相关
|
||
- ✅ 添加Cookie: `【username#user_id】尝试添加Cookie: cookie_id`
|
||
- ✅ 操作成功: `【username#user_id】Cookie添加成功: cookie_id`
|
||
- ✅ 权限冲突: `【username#user_id】Cookie ID冲突: cookie_id 已被其他用户使用`
|
||
|
||
#### 卡券管理相关
|
||
- ✅ 创建卡券: `【username#user_id】创建卡券: card_name`
|
||
- ✅ 创建成功: `【username#user_id】卡券创建成功: card_name (ID: card_id)`
|
||
- ✅ 创建失败: `【username#user_id】创建卡券失败: card_name - error`
|
||
|
||
#### 关键字管理相关
|
||
- ✅ 更新关键字: `【username#user_id】更新Cookie关键字: cookie_id, 数量: count`
|
||
- ✅ 权限验证: `【username#user_id】尝试操作其他用户的Cookie关键字: cookie_id`
|
||
|
||
#### 用户设置相关
|
||
- ✅ 设置更新: `【username#user_id】更新用户设置: key = value`
|
||
- ✅ 更新成功: `【username#user_id】用户设置更新成功: key`
|
||
|
||
## 🔧 技术实现
|
||
|
||
### 1. 中间件增强
|
||
```python
|
||
@app.middleware("http")
|
||
async def log_requests(request, call_next):
|
||
# 获取用户信息
|
||
user_info = "未登录"
|
||
try:
|
||
auth_header = request.headers.get("Authorization")
|
||
if auth_header and auth_header.startswith("Bearer "):
|
||
token = auth_header.split(" ")[1]
|
||
if token in SESSION_TOKENS:
|
||
token_data = SESSION_TOKENS[token]
|
||
if time.time() - token_data['timestamp'] <= TOKEN_EXPIRE_TIME:
|
||
user_info = f"【{token_data['username']}#{token_data['user_id']}】"
|
||
except Exception:
|
||
pass
|
||
|
||
logger.info(f"🌐 {user_info} API请求: {request.method} {request.url.path}")
|
||
# ...
|
||
```
|
||
|
||
### 2. 统一日志工具函数
|
||
```python
|
||
def get_user_log_prefix(user_info: Dict[str, Any] = None) -> str:
|
||
"""获取用户日志前缀"""
|
||
if user_info:
|
||
return f"【{user_info['username']}#{user_info['user_id']}】"
|
||
return "【系统】"
|
||
|
||
def log_with_user(level: str, message: str, user_info: Dict[str, Any] = None):
|
||
"""带用户信息的日志记录"""
|
||
prefix = get_user_log_prefix(user_info)
|
||
full_message = f"{prefix} {message}"
|
||
|
||
if level.lower() == 'info':
|
||
logger.info(full_message)
|
||
elif level.lower() == 'error':
|
||
logger.error(full_message)
|
||
# ...
|
||
```
|
||
|
||
### 3. 业务接口改进
|
||
```python
|
||
@app.post("/cookies")
|
||
def add_cookie(item: CookieIn, current_user: Dict[str, Any] = Depends(get_current_user)):
|
||
try:
|
||
log_with_user('info', f"尝试添加Cookie: {item.id}", current_user)
|
||
# 业务逻辑...
|
||
log_with_user('info', f"Cookie添加成功: {item.id}", current_user)
|
||
except Exception as e:
|
||
log_with_user('error', f"添加Cookie失败: {item.id} - {str(e)}", current_user)
|
||
```
|
||
|
||
## 📋 修改的文件和接口
|
||
|
||
### reply_server.py
|
||
- **中间件**: `log_requests` - API请求/响应日志
|
||
- **工具函数**: `get_user_log_prefix`, `log_with_user`
|
||
- **认证接口**: 登录、注册接口
|
||
- **业务接口**: Cookie管理、卡券管理、关键字管理、用户设置
|
||
|
||
### 修改的接口数量
|
||
- **API中间件**: 1个(影响所有接口)
|
||
- **认证相关**: 2个接口(登录、注册)
|
||
- **Cookie管理**: 1个接口(添加Cookie)
|
||
- **卡券管理**: 1个接口(创建卡券)
|
||
- **关键字管理**: 1个接口(更新关键字)
|
||
- **用户设置**: 1个接口(更新设置)
|
||
|
||
## 🎯 日志格式规范
|
||
|
||
### 用户标识格式
|
||
- **已登录用户**: `【username#user_id】`
|
||
- **未登录用户**: `【未登录】`
|
||
- **系统操作**: `【系统】`
|
||
|
||
### 日志级别使用
|
||
- **INFO**: 正常操作、成功操作
|
||
- **WARNING**: 权限验证失败、业务规则冲突
|
||
- **ERROR**: 系统错误、操作失败
|
||
|
||
### 消息格式
|
||
- **操作尝试**: `尝试{操作}: {对象}`
|
||
- **操作成功**: `{操作}成功: {对象}`
|
||
- **操作失败**: `{操作}失败: {对象} - {原因}`
|
||
|
||
## 💡 日志分析技巧
|
||
|
||
### 1. 按用户过滤
|
||
```bash
|
||
# 查看特定用户的所有操作
|
||
grep '【admin#1】' logs/xianyu_2025-07-25.log
|
||
|
||
# 查看特定用户的API请求
|
||
grep '【admin#1】.*API请求' logs/xianyu_2025-07-25.log
|
||
```
|
||
|
||
### 2. 监控用户活动
|
||
```bash
|
||
# 统计用户活跃度
|
||
grep -o '【[^】]*#[^】]*】' logs/xianyu_2025-07-25.log | sort | uniq -c
|
||
|
||
# 查看登录活动
|
||
grep '登录' logs/xianyu_2025-07-25.log
|
||
```
|
||
|
||
### 3. 权限验证监控
|
||
```bash
|
||
# 查看权限验证失败
|
||
grep '无权限\|权限验证失败' logs/xianyu_2025-07-25.log
|
||
|
||
# 查看跨用户访问尝试
|
||
grep '尝试操作其他用户' logs/xianyu_2025-07-25.log
|
||
```
|
||
|
||
### 4. 错误追踪
|
||
```bash
|
||
# 查看特定用户的错误
|
||
grep 'ERROR.*【admin#1】' logs/xianyu_2025-07-25.log
|
||
|
||
# 查看操作失败
|
||
grep '失败.*【.*】' logs/xianyu_2025-07-25.log
|
||
```
|
||
|
||
## 🔍 监控指标建议
|
||
|
||
### 1. 用户活跃度指标
|
||
- 每个用户的API调用频率
|
||
- 用户登录频率和时长
|
||
- 用户操作成功率
|
||
|
||
### 2. 安全监控指标
|
||
- 登录失败次数(按用户)
|
||
- 权限验证失败次数
|
||
- 跨用户访问尝试次数
|
||
|
||
### 3. 业务监控指标
|
||
- Cookie操作频率(按用户)
|
||
- 卡券创建和使用情况
|
||
- 用户设置修改频率
|
||
|
||
## 🚀 部署和使用
|
||
|
||
### 1. 立即生效
|
||
重启服务后,新的日志格式立即生效:
|
||
```bash
|
||
# 重启服务
|
||
docker-compose restart
|
||
|
||
# 查看新的日志格式
|
||
docker-compose logs -f | grep '【.*】'
|
||
```
|
||
|
||
### 2. 日志轮转配置
|
||
确保日志轮转能够处理增加的日志内容:
|
||
```python
|
||
# loguru配置
|
||
logger.add(
|
||
"logs/xianyu_{time:YYYY-MM-DD}.log",
|
||
rotation="100 MB",
|
||
retention="7 days",
|
||
compression="zip",
|
||
format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {name}:{function}:{line} - {message}"
|
||
)
|
||
```
|
||
|
||
### 3. 监控工具集成
|
||
如果使用ELK、Grafana等监控工具,可以基于用户标识创建仪表板:
|
||
- 按用户分组的操作统计
|
||
- 用户行为分析
|
||
- 安全事件监控
|
||
|
||
## 🎉 改进效果
|
||
|
||
### 1. 调试效率提升
|
||
- **问题定位**: 快速定位特定用户的问题
|
||
- **操作追踪**: 完整的用户操作链路追踪
|
||
- **权限验证**: 清晰的权限验证日志
|
||
|
||
### 2. 监控能力增强
|
||
- **用户行为**: 详细的用户行为分析
|
||
- **安全监控**: 实时的安全事件监控
|
||
- **性能分析**: 按用户维度的性能分析
|
||
|
||
### 3. 运维管理优化
|
||
- **故障排查**: 快速定位用户相关问题
|
||
- **容量规划**: 基于用户活跃度的容量规划
|
||
- **安全审计**: 完整的用户操作审计日志
|
||
|
||
## 📞 使用建议
|
||
|
||
1. **日志查看**: 使用 `grep` 命令按用户过滤日志
|
||
2. **实时监控**: 使用 `tail -f` 实时监控特定用户操作
|
||
3. **定期分析**: 定期分析用户活跃度和操作模式
|
||
4. **安全审计**: 定期检查权限验证失败和异常操作
|
||
|
||
---
|
||
|
||
**总结**: 通过本次改进,多用户系统的日志现在具备了完整的用户标识能力,大大提升了系统的可观测性和可维护性!
|