☰
Modly日志与会话归档系统揭秘:3D模型生成桌面应用如何快速定位线上问题
2026/10/24 10:07:30 网站建设 项目流程

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.logElectron 主进程的全部 INFO / WARN / ERROR 记录追踪应用启动、扩展安装、更新等通用流程
errors.log所有 ERROR 级别记录,以及 Python 侧含 error、exception、traceback 等关键词的输出排错第一入口,只关心报错时看它就够
runtime.logPython 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():

  1. 应用每次启动时,app.whenReady回调会第一时间执行归档(index.ts#L89-L91),把上一次会话的三个日志文件整体移入logs/sessions/<时间戳>/目录;
  2. 目录名采用2026-03-20T10-23-45这样的启动时间戳,按名称排序即时间顺序;
  3. 归档后自动清理旧会话,仅保留最近 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),渲染进程不直接碰磁盘,权限收口在主进程。

快速定位线上问题的实操步骤 🧭

遇到"生成失败、界面报错、扩展安装卡住"等问题时,建议按以下顺序排查:

  1. 先看errors.log:只含错误记录,噪音最小。优先确认错误发生在 Electron 侧还是 Python 侧(看前缀是否为RUNTIME/[Renderer])。
  2. 按时间戳切到出问题的会话:在设置页会话下拉框中选择故障发生前后那次启动对应的归档,避免被当前会话日志干扰。
  3. 到runtime.log对齐后端行为:3D 模型生成类问题(如工作流节点报错)通常伴随 FastAPI 端的 traceback,可与errors.log中同一时刻的记录互相印证。
  4. 点 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询