Modly日志与会话归档系统揭秘:3D模型生成桌面应用如何快速定位线上问题
【免费下载链接】modlyDesktop app to generate 3D models from images or prompt using local AI — runs entirely on your GPU项目地址: https://gitcode.com/GitHub_Trending/mo/modly
Modly 是一款能在本地 GPU 上从图片、文字提示词直接生成 3D 模型的桌面应用。由于它同时运行 Electron 前端和 Python(FastAPI)后端两套进程,任何一环出错都可能出现"界面闪一下就没了"这类难以复现的问题。为此 Modly 内置了一套日志 + 会话归档系统:每个会话的日志自动分文件落盘、按启动时间打包归档,并在设置页提供一键查看与复制,帮助开发者与用户快速定位线上问题。
日志系统架构:三个文件各司其职
Modly 的日志统一存放在用户数据目录(userData/logs)下,按职责拆成三个文件,见 logger.ts:
| 日志文件 | 写入内容 | 用途 |
|---|---|---|
modly.log | Electron 主进程的全部 INFO / WARN / ERROR 记录 | 追踪应用启动、扩展安装、更新等通用流程 |
errors.log | 所有 ERROR 级别记录,以及 Python 侧含 error、exception、traceback 等关键词的输出 | 排错第一入口,只关心报错时看它就够 |
runtime.log | Python FastAPI / uvicorn 前后端桥接的 stdout 与 stderr | 排查模型推理、3D 生成等后端运行时问题 |
每一条日志都会带上 ISO 时间戳与级别标签,格式形如[2026-03-20T10:23:45.123Z] [ERROR] ...,方便按时间线对齐前后端行为。
日志从哪来:四条写入通道
日志并非只有一个入口,Modly 为不同进程各留了一条"管道":
- 主进程日志:
logger.info / warn / error写入modly.log,其中error会同时双写errors.log(logger.ts#L59-L68)。 - 未捕获异常兜底:主进程顶层监听
uncaughtException与unhandledRejection,任何"漏网"异常都会被记入errors.log并推送到界面(index.ts#L77-L87)。 - Python 运行时输出:Electron 通过 python-bridge.ts 启动 uvicorn,并把其 stdout / stderr 逐行送入
logger.python(),正常输出进runtime.log,检测到报错关键词时再追加进errors.log。 - 前端渲染进程:界面侧可通过 IPC 事件
log:error上报错误,统一打上[Renderer]前缀写入(ipc-handlers.ts#L324)。
此外,写入函数对console做了 EPIPE 防护——即使日志管道失效(例如终端被关闭),日志系统本身也绝不会把应用搞崩,这本身就是"线上问题定位"的一道保险。
会话归档:每次启动自动打包,只留最近10次
Modly 用"会话(Session)"划分每一次应用启动,归档逻辑集中在 archiveCurrentSession():
- 应用每次启动时,
app.whenReady回调会第一时间执行归档(index.ts#L89-L91),把上一次会话的三个日志文件整体移入logs/sessions/<时间戳>/目录; - 目录名采用
2026-03-20T10-23-45这样的启动时间戳,按名称排序即时间顺序; - 归档后自动清理旧会话,仅保留最近 10 次(
MAX_SESSIONS = 10),磁盘占用可控。
归档后的目录结构大致如下:
userData/logs/ ├── modly.log ← 当前会话(正在写入) ├── errors.log ├── runtime.log └── sessions/ ├── 2026-03-20T10-23-45/ └── 2026-03-21T09-01-12/这套机制的关键价值在于:用户"上次崩溃"时的现场日志不会被本次启动覆盖,问题发生后仍可在最近 10 个会话中逐段回溯。
设置页查看日志:切换会话、一键复制
归档不是目的,能查看才是。Modly 在设置 → Logs页面(LogsSection.tsx)提供了完整的日志面板:
- 会话下拉框:默认显示"Current session"(当前会话),也可切换到任意历史归档会话,列表来自 IPC 接口
log:listSessions(ipc-handlers.ts#L341-L352); - 三个文件标签页:Errors(Electron 与 Python 全部报错)、Runtime(FastAPI / Python 输出)、App(Electron 通用日志);
- Refresh / Copy all 按钮:刷新或一键复制当前文件全部内容,方便直接粘贴到问题反馈中——页面上也明确提示了这一点。
前端通过 preload 层暴露的window.electron.log.readAll / listSessions读写日志(electron-api.ts#L168-L169),渲染进程不直接碰磁盘,权限收口在主进程。
快速定位线上问题的实操步骤 🧭
遇到"生成失败、界面报错、扩展安装卡住"等问题时,建议按以下顺序排查:
- 先看
errors.log:只含错误记录,噪音最小。优先确认错误发生在 Electron 侧还是 Python 侧(看前缀是否为RUNTIME/[Renderer])。 - 按时间戳切到出问题的会话:在设置页会话下拉框中选择故障发生前后那次启动对应的归档,避免被当前会话日志干扰。
- 到
runtime.log对齐后端行为:3D 模型生成类问题(如工作流节点报错)通常伴随 FastAPI 端的 traceback,可与errors.log中同一时刻的记录互相印证。 - 点 Copy all 完整导出:提交问题反馈时附上会话时间与三个文件的完整内容,开发者即可按时间戳快速还原现场。
相关源码索引 📚
- 日志核心(格式、写入、归档、保留策略):electron/main/logger.ts
- 异常兜底与启动时归档触发:electron/main/index.ts
- 日志 IPC 接口(读取 / 列出会话):electron/main/ipc-handlers.ts
- Python 输出捕获桥接:electron/main/python-bridge.ts
- 设置页日志面板 UI:src/areas/settings/components/LogsSection.tsx
小结
Modly 的日志与会话归档系统用极简的设计解决了本地 AI 桌面应用最常见的排错难题:分文件降低噪音、按启动时间归档保住现场、10 次上限控制磁盘、设置页一键查看复制。当你从图片生成 3D 模型遇到任何异常时,打开设置页的 Logs 面板,就是定位线上问题最快的入口。
【免费下载链接】modlyDesktop app to generate 3D models from images or prompt using local AI — runs entirely on your GPU项目地址: https://gitcode.com/GitHub_Trending/mo/modly
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考