design.md 2.91 KB

Design Document: Simple Logging System

Context

当前应用缺乏基本的日志记录功能,当出现问题时难以诊断。需要建立简单实用的日志系统来记录关键事件和错误信息。

Goals / Non-Goals

Goals:

  • 提供基本的日志记录功能
  • 记录关键操作和错误信息
  • 实现简单的日志文件管理
  • 使用标准库,保持简单
  • 帮助快速定位和解决问题

Non-Goals:

  • 不实现复杂的日志分析功能
  • 不集成第三方日志服务
  • 不实现实时日志监控
  • 不设计复杂的日志分类系统

Decisions

1. 日志框架选择

Decision: 使用 Python 标准库 logging 模块

  • Why: 标准库提供足够的基础功能,无额外依赖
  • Alternatives considered: print语句、简单的文件写入
  • Chosen approach: Python logging + 基础配置

2. 日志文件结构

Decision: 单一日志文件

logs/
└── app.log    # 统一的应用日志文件

3. 日志轮转策略

Decision: 基于文件大小的简单轮转

  • 最大文件大小:10MB
  • 保留最近 5 个历史文件
  • 不使用压缩,保持简单

4. 日志级别策略

  • INFO: 记录正常操作流程
  • WARNING: 记录潜在问题
  • ERROR: 记录操作失败和错误
  • DEBUG: 开发时可启用详细信息

Technical Architecture Details

简化的日志系统

SimpleLogger
├── 初始化基础配置
├── 创建单一logger
├── 设置简单格式化器
└── 实现基础轮转

格式化器
├── 时间戳
├── 日志级别
├── 模块名称
└── 消息内容

关键日志记录点

  1. 应用启动: 应用启动、配置加载
  2. 用户认证: 登录成功/失败、认证错误
  3. 配置操作: 配置文件读取错误
  4. 数据库连接: 连接成功/失败、查询错误
  5. 图片生成: API调用成功/失败、生成错误
  6. 文件操作: 图片保存成功/失败、历史记录错误

性能考虑

  • 使用标准库的优化性能
  • 简单格式减少格式化开销
  • 合理的轮转避免大文件问题
  • 关键操作才记录,避免过度日志

Integration Points

模块集成

  • DatabaseManager: 添加基础数据库日志
  • ImageGeneratorWindow: 添加关键操作日志
  • ImageGenerationWorker: 添加生成过程日志
  • HistoryManager: 添加文件操作日志

配置集成

{
  "logging": {
    "enabled": true,
    "level": "INFO",
    "max_file_size_mb": 10
  }
}

Implementation Plan

  1. Step 1: 创建简单的日志初始化函数
  2. Step 2: 集成到 DatabaseManager
  3. Step 3: 集成到图片生成模块
  4. Step 4: 集成到错误处理
  5. Step 5: 测试和验证

Design Principles

  • 简单实用:只记录必要信息
  • 不影响性能:关键操作才记录
  • 易于查看:日志文件直接可读
  • 维护简单:最小化代码复杂度