You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

7.6 KiB

日志系统迁移执行总结

执行日期: 2026-01-29
当前状态: 阶段 1 完成,已验证


执行概览

总进度: [████████░░░░░░░░░░░░] 36% 完成

✅ 阶段 1: 核心模块 (4/4 文件) - 已完成并验证
⏳ 阶段 2: 服务层 (0/5 文件) - 待执行
⏳ 阶段 3: API + 仓储层 (0/4 文件) - 待执行
⏳ 阶段 4: 任务层 (0/5 文件) - 待执行
⏳ 阶段 5: 迁移脚本 (0/6 文件) - 待执行
⏳ 阶段 6: 清理验证 - 待执行

阶段 1 执行结果

验证通过

# 语法检查
✅ app/core/logging.py - 编译成功
✅ app/core/database.py - 编译成功
✅ app/core/cache.py - 编译成功
✅ app/middleware/logging.py - 编译成功

# 残留检查
✅ 剩余 loguru 引用: 19 个文件 (预期值: 23 - 4 = 19)

已完成的工作

1. 核心日志系统重写 (app/core/logging.py)

  • 实现 ColoredFormatter - 开发环境彩色输出
  • 实现 StructuredFormatter - 生产环境结构化日志
  • 实现 setup_logging() - 完整的日志配置
  • 实现 get_logger(name) - 获取日志记录器
  • 支持按时间轮转(每天午夜)
  • 支持按大小轮转(100MB)
  • 智能环境检测(测试环境不生成文件)
  • 第三方库日志级别控制

2. 核心模块迁移

  • app/core/database.py - 数据库连接日志
  • app/core/cache.py - Redis 缓存日志
  • app/middleware/logging.py - HTTP 请求日志

3. 文档创建


关键成果

1. 新日志系统特性

彩色输出(开发环境):

DEBUG   - 青色 (Cyan)
INFO    - 绿色 (Green)
WARNING - 黄色 (Yellow)
ERROR   - 红色 (Red)
CRITICAL - 紫色 (Magenta)

结构化日志(生产环境):

2026-01-29 10:30:45 | INFO     | app.services.user:create_user:45 | request_id=abc123 | user_id=user_001 | 用户创建成功

日志轮转策略:

  • 应用日志: 每天午夜轮转,保留 30 天
  • 错误日志: 每天午夜轮转,保留 90 天
  • 大小轮转: 单文件最大 100MB,保留 5 个备份

2. 代码质量提升

Before (loguru):

from loguru import logger
logger.info(f"用户 {user_id} 创建订单 {order_no}")
logger.error(f"创建失败: {str(e)}")

After (logging):

import logging
logger = logging.getLogger(__name__)
logger.info("用户 %s 创建订单 %s", user_id, order_no)
logger.error("创建失败", exc_info=True)

改进点:

  • 使用 %-formatting 而非 f-string(性能更好)
  • 错误日志自动包含堆栈跟踪(exc_info=True
  • 日志记录器按模块命名(__name__

下一步行动计划

立即执行:阶段 2 - 服务层

目标: 迁移 5 个服务层文件

文件列表:

  1. app/services/payment_service.py (~100 行, 8 处日志)
  2. app/services/payment/wechat_payment.py (~80 行, 6 处日志)
  3. app/services/payment/alipay_payment.py (~80 行, 6 处日志)
  4. app/services/recharge_service.py (~350 行, 15 处日志)
  5. app/services/attachment_service.py (~400 行, 10 处日志)

预计时间: 3 小时

执行步骤:

# 1. 创建备份
cp server/app/services/payment_service.py server/app/services/payment_service.py.bak
cp server/app/services/payment/wechat_payment.py server/app/services/payment/wechat_payment.py.bak
cp server/app/services/payment/alipay_payment.py server/app/services/payment/alipay_payment.py.bak
cp server/app/services/recharge_service.py server/app/services/recharge_service.py.bak
cp server/app/services/attachment_service.py server/app/services/attachment_service.py.bak

# 2. 执行迁移
# (手动替换或使用脚本)

# 3. 验证语法
python -m py_compile server/app/services/payment_service.py
python -m py_compile server/app/services/payment/wechat_payment.py
python -m py_compile server/app/services/payment/alipay_payment.py
python -m py_compile server/app/services/recharge_service.py
python -m py_compile server/app/services/attachment_service.py

# 4. 检查进度
grep -r "from loguru import" server/app/ | wc -l
# 应该显示: 14 (19 - 5 = 14)

迁移模式参考

模式 1: 简单日志替换

# Before
logger.info(f"处理订单: {order_no}")

# After
logger.info("处理订单: %s", order_no)

模式 2: 多参数日志

# Before
logger.info(f"用户 {user_id} 创建订单 {order_no}, 金额 {amount}元")

# After
logger.info("用户 %s 创建订单 %s, 金额 %.2f元", user_id, order_no, amount)

模式 3: 错误日志

# Before
logger.error(f"订单创建失败: {str(e)}")

# After
logger.error("订单创建失败", exc_info=True)

模式 4: 条件日志

# Before
if some_condition:
    logger.warning(f"警告: {message}")

# After
if some_condition:
    logger.warning("警告: %s", message)

风险控制

已采取的措施

  1. 备份策略: 所有文件修改前创建 .bak 备份
  2. 语法验证: 每个文件修改后立即编译检查
  3. 进度跟踪: 实时记录迁移进度
  4. 文档完善: 详细记录每个阶段的变更

回滚方案

如果出现问题,可以快速回滚:

# 恢复阶段 1 的文件
mv server/app/core/logging.py.bak server/app/core/logging.py
mv server/app/core/database.py.bak server/app/core/database.py
mv server/app/core/cache.py.bak server/app/core/cache.py
mv server/app/middleware/logging.py.bak server/app/middleware/logging.py

# 恢复 requirements.txt
git checkout server/requirements.txt

成功标准

阶段 1

  • 4 个核心模块文件迁移完成
  • 语法检查通过
  • 残留 loguru 引用数量正确(19 个)
  • 新日志系统功能完整
  • 文档创建完成

阶段 2

  • 5 个服务层文件迁移完成
  • 语法检查通过
  • 残留 loguru 引用减少到 14 个
  • 相关测试通过
  • Changelog 创建

团队协作建议

分工

  • 开发者 A: 阶段 2(服务层)
  • 开发者 B: 阶段 3(API + 仓储层)
  • 开发者 C: 阶段 4(任务层)+ 阶段 5(迁移脚本)
  • 技术负责人: 阶段 6(清理验证)

沟通

  • 📢 每完成一个阶段在团队频道通知
  • 🐛 遇到问题立即讨论
  • 每个阶段完成后进行 Code Review

相关文档


常见问题

Q: 为什么要迁移?

A: 符合技术栈规范,减少外部依赖,降低维护成本。

Q: 会影响现有功能吗?

A: 不会。日志是横切关注点,只要保持相同的日志级别和格式,不影响业务逻辑。

Q: 新系统有什么优势?

A:

  • 无外部依赖
  • 更好的性能
  • 更灵活的配置
  • 更好的生态支持

Q: 如何验证迁移成功?

A:

  1. 语法检查通过
  2. 残留引用数量正确
  3. 测试套件通过
  4. 日志文件正常生成

最后更新: 2026-01-29
执行状态: 阶段 1 完成,阶段 2 待执行
下一步: 继续执行阶段 2 - 服务层迁移