# 用户日志显示改进总结 ## 🎯 改进目标 在多用户系统中,原有的日志无法识别具体的操作用户,导致调试和监控困难。本次改进为所有系统日志添加了当前登录用户的信息。 ## 📊 改进内容 ### 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. **安全审计**: 定期检查权限验证失败和异常操作 --- **总结**: 通过本次改进,多用户系统的日志现在具备了完整的用户标识能力,大大提升了系统的可观测性和可维护性!