本次更新为 DrawThings WebUI 添加了完整的日志记录功能,用于追踪图片生成和大模型调用的详细过程。
变更内容:
- 添加
import logging导入 - 创建日志目录
logs/ - 配置两个logger实例:
image_logger: 用于图片生成日志llm_logger: 用于LLM调用日志
- 在
generate_image()函数中添加日志记录:- 开始生成时记录参数(用户ID、尺寸、步数、Seed)
- 生成成功时记录文件名、耗时、Seed
- 超时时记录错误信息
- 连接失败时记录错误信息
- 其他异常时记录详细错误
代码位置:
- 第9行: 添加logging导入
- 第43-59行: 日志配置
- 第341行: 记录开始生成
- 第378行: 记录生成成功
- 第443, 451, 459行: 记录各种错误情况
变更内容:
- 添加
import logging导入 - 配置
llm_logger实例 - 在
detect_nsfw_content()函数中添加日志记录:- 配置不完整时的警告
- 检测开始时的信息
- API响应状态码
- 检测结果(NSFW/安全)
- 数据库更新确认
- 各种错误情况
代码位置:
- 第7-10行: 添加logging导入和logger配置
- 第47-52行: 记录配置警告和检测开始
- 第95行: 记录API响应
- 第106-107行: 记录检测结果
- 第111行: 记录数据库更新
- 第116, 120, 124行: 记录错误信息
变更内容:
- 添加
import logging导入 - 配置
llm_logger实例 - 在
refine_prompt_with_llm()函数中添加日志记录:- API Key缺失时的错误
- 润色开始时的信息(原始长度、语言)
- API响应状态码
- 润色成功时的信息(原始和润色后长度)
- API请求失败的错误
- 网络请求错误
代码位置:
- 第8行: 添加logging导入
- 第18-20行: logger配置
- 第81-86行: 记录API Key错误和润色开始
- 第126行: 记录API响应
- 第132-133行: 记录润色成功
- 第137-138行: 记录API错误
- 第142-143行: 记录网络错误
变更内容:
- 在功能特性中添加"日志记录"条目
- 在项目结构中添加logs目录说明
- 新增"日志记录功能"章节,包含使用说明
- 添加相关文档链接
内容:
- 完整的功能说明文档
- 日志文件格式和示例
- 查看日志的方法(Windows/Linux/Mac)
- 测试方法
- 注意事项和未来改进方向
内容:
- 自动化测试脚本
- 验证日志目录和文件创建
- 测试日志写入功能
- 验证日志内容正确性
记录所有图片生成操作:
2026-04-10 22:30:15,123 - INFO - 开始生成图片 - 用户ID: 1, 尺寸: 512x512, 步数: 8, Seed: -1
2026-04-10 22:30:45,456 - INFO - 图片生成成功 - 文件名: generated_20260410_223015.png, 耗时: 30.33秒, Seed: 123456789
2026-04-10 22:31:00,789 - ERROR - 图片生成超时 - 耗时: 600.00秒, 用户ID: 1
记录所有大模型API调用:
2026-04-10 22:30:46,789 - INFO - 开始NSFW检测 - 图片ID: 20260410_223015, 提示词长度: 45
2026-04-10 22:30:48,012 - INFO - NSFW检测API响应 - 状态码: 200
2026-04-10 22:30:48,013 - INFO - NSFW检测结果 - 图片ID: 20260410_223015, 结果: 安全, 回答: NO
2026-04-10 22:31:00,234 - INFO - 开始润色提示词 - 原始长度: 30, 语言: zh
2026-04-10 22:31:02,456 - INFO - 提示词润色成功 - 原始长度: 30, 润色后长度: 85
- 日志级别: INFO(记录正常操作)、WARNING(警告)、ERROR(错误)
- 日志格式:
%(asctime)s - %(levelname)s - %(message)s - 编码: UTF-8(支持中文)
- 文件模式: 追加模式(不会覆盖历史日志)
使用Python标准库的 logging 模块:
- 两个独立的logger实例共享同一个日志文件(llm_calls.log)
- logger名称:
image_generation: 图片生成日志llm_calls: LLM调用日志(NSFW检测和提示词润色共用)
- logging模块本身是线程安全的
- 多个并发请求可以安全地写入日志文件
运行测试脚本:
python test_logging.py测试结果:
============================================================
测试日志记录功能
============================================================
1. 检查日志目录: D:\work\project\my\drawThingsWebUI\logs
✓ 日志目录存在
2. 导入app模块...
数据库初始化完成
✓ app模块导入成功
3. 检查日志文件:
- 图片生成日志: D:\work\project\my\drawThingsWebUI\logs\image_generation.log
✓ 文件已创建
- LLM调用日志: D:\work\project\my\drawThingsWebUI\logs\llm_calls.log
✓ 文件已创建
4. 测试写入日志...
✓ 测试日志写入成功
✓ 图片生成日志内容验证通过
✓ LLM调用日志内容验证通过
============================================================
✓ 所有测试通过!日志功能正常工作
============================================================
Windows PowerShell:
# 查看最后50行
Get-Content logs\image_generation.log -Tail 50
Get-Content logs\llm_calls.log -Tail 50
# 实时监控
Get-Content logs\image_generation.log -WaitLinux/Mac:
# 查看最后50行
tail -n 50 logs/image_generation.log
tail -n 50 logs/llm_calls.log
# 实时监控
tail -f logs/image_generation.log
tail -f logs/llm_calls.log- 问题追踪: 可以快速定位图片生成失败的原因
- 性能分析: 通过耗时记录分析性能瓶颈
- 审计追踪: 记录所有关键操作,便于审计
- 调试支持: 开发和维护时提供详细信息
- 用户行为分析: 了解用户使用模式和偏好
- 磁盘空间: 长期运行需要定期清理或轮转日志
- 隐私保护: 日志中包含用户提示词,需妥善保管
- 性能影响: 日志写入是同步操作,但影响极小
- 编码问题: 使用UTF-8编码,确保正确显示中文
- 添加日志轮转功能(按大小或时间)
- 添加DEBUG级别的详细日志
- 支持日志分级输出到不同文件
- 添加日志分析工具
- 支持远程日志收集(如ELK栈)
- 添加日志压缩和归档功能
app.py: 主应用,图片生成日志llm_client.py: NSFW检测日志ai_refine.py: 提示词润色日志docs/LOGGING_FEATURE.md: 详细功能文档test_logging.py: 测试脚本README.md: 项目说明(已更新)