mirror of
https://github.com/zhinianboke/xianyu-auto-reply.git
synced 2025-08-02 12:37:35 +08:00
7.8 KiB
7.8 KiB
用户日志显示改进总结
🎯 改进目标
在多用户系统中,原有的日志无法识别具体的操作用户,导致调试和监控困难。本次改进为所有系统日志添加了当前登录用户的信息。
📊 改进内容
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. 中间件增强
@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. 统一日志工具函数
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. 业务接口改进
@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. 按用户过滤
# 查看特定用户的所有操作
grep '【admin#1】' logs/xianyu_2025-07-25.log
# 查看特定用户的API请求
grep '【admin#1】.*API请求' logs/xianyu_2025-07-25.log
2. 监控用户活动
# 统计用户活跃度
grep -o '【[^】]*#[^】]*】' logs/xianyu_2025-07-25.log | sort | uniq -c
# 查看登录活动
grep '登录' logs/xianyu_2025-07-25.log
3. 权限验证监控
# 查看权限验证失败
grep '无权限\|权限验证失败' logs/xianyu_2025-07-25.log
# 查看跨用户访问尝试
grep '尝试操作其他用户' logs/xianyu_2025-07-25.log
4. 错误追踪
# 查看特定用户的错误
grep 'ERROR.*【admin#1】' logs/xianyu_2025-07-25.log
# 查看操作失败
grep '失败.*【.*】' logs/xianyu_2025-07-25.log
🔍 监控指标建议
1. 用户活跃度指标
- 每个用户的API调用频率
- 用户登录频率和时长
- 用户操作成功率
2. 安全监控指标
- 登录失败次数(按用户)
- 权限验证失败次数
- 跨用户访问尝试次数
3. 业务监控指标
- Cookie操作频率(按用户)
- 卡券创建和使用情况
- 用户设置修改频率
🚀 部署和使用
1. 立即生效
重启服务后,新的日志格式立即生效:
# 重启服务
docker-compose restart
# 查看新的日志格式
docker-compose logs -f | grep '【.*】'
2. 日志轮转配置
确保日志轮转能够处理增加的日志内容:
# 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. 运维管理优化
- 故障排查: 快速定位用户相关问题
- 容量规划: 基于用户活跃度的容量规划
- 安全审计: 完整的用户操作审计日志
📞 使用建议
- 日志查看: 使用
grep
命令按用户过滤日志 - 实时监控: 使用
tail -f
实时监控特定用户操作 - 定期分析: 定期分析用户活跃度和操作模式
- 安全审计: 定期检查权限验证失败和异常操作
总结: 通过本次改进,多用户系统的日志现在具备了完整的用户标识能力,大大提升了系统的可观测性和可维护性!