feat(m188): launcher.log 早落盘 + 会话日志搬到 logs/game(旧家只读兼容)
用户投诉原话:「我们的启动日志放在哪?…他找半天没找到崩溃日志」「只有一个安装日志」。 启动器运行日志(.ULL/logs/launcher.log) - presenter 构造 HostEnv 时就登记日志目录:启动早期缓冲的 200 行([probe]/[font]/[theme]) 当场刷盘,不再是「只有开过一局游戏才有日志」。 - app/** 里所有 eprintln! 诊断改走 app::diag::diag!(stderr + 文件双写,行首 [tag] 即 scope), 含 boot/boot::fallback/state/update 各线。 - boot 那一拍补一行后端事实(request/effective/fallback)。 - 滚动上限(1 MiB → launcher.1.log,只留一份)写进 README 与 docs/logs-location.md。 会话日志搬家:data/agent/sessions → logs - LauncherLayout: sessions_root()/game_logs() 新增,agent_sessions() 降级为只读兼容。 - host/logs 与 cli/commands/sessions 两个根合并(同 id 新根优先),event_path 回落旧家。 - 不搬不删;日志目录写一份 session-log-location.json 记录(moved=0, policy=read-only-compat)。 入口与文案 - 设置页「通用」新增「日志文件夹」行:路径 + 打开目录 + 复制路径(i18n 中英)。 - 日志页页头的「打开目录」不再是占位:走 M187 的 open_dir,失败文本带路径并送进剪贴板。 - README.md / README.zh-CN.md 新增「日志在哪」章节(含 crash-reports 只在游戏走到那一步才有), docs/logs-location.md 给出上限、双写判据、迁移策略与没验的部分。 守门(每条都有变异证明,见报告) - 旧家会话仍列得出/打不开 ⇒ 只读新根变红;新会话写 logs/game ⇒ 只读旧根、写回旧家都变红。 - launcher.log 滚动 ⇒ 干掉 rename 变红。 - 打开日志文件夹指向真实目录 ⇒ 换成 cache/ 或去掉 create_dir_all 都变红。 - 日志根随三模式变化 ⇒ 把 HostEnv::logs_dir 写死成便携落点变红。
This commit is contained in:
1 parent
efc663a3cb
commit
5fd5cd47dc
47 files changed
+1371
-119
No files matched your search
@@ -205,6 +205,31 @@ lists them all: `instances`, `install`, `launch`, `pack import`, `accounts`, `se
|
||||
`ull update apply`. Debug builds can rehearse the whole chain against a local directory source
|
||||
(`ULL_UPDATE_DIR`); release builds do not contain that path at all.
|
||||
|
||||
### Where the logs are
|
||||
|
||||
Everything the launcher writes on its own side lives under `<data root>/logs/`. The settings page has
|
||||
a **Log folder** row that shows that path with *Open folder* and *Copy path*; the logs page header has
|
||||
*Open folder* as well. The data root is `<exe folder>/.ULL` in portable mode, `<per-user app data>/ULL`
|
||||
in standard mode, and `<custom root>/.ULL` in custom mode — the same value the settings page displays
|
||||
as the launcher data directory.
|
||||
|
||||
| Path | What it is |
|
||||
|---|---|
|
||||
| `logs/launcher.log` | The launcher's own runtime log: boot probe, font/theme decisions, backend choice, and every launch attempt (command line facts, spawn result, exit). Rolled over at 1 MiB into `logs/launcher.1.log`, exactly **one** old copy kept, so it cannot grow without bound. |
|
||||
| `logs/launcher.1.log` | The previous 1 MiB, replaced on the next rollover. |
|
||||
| `logs/game/<session-id>.jsonl` | One JSONL event stream per launch: the command line (secrets redacted), every stdout/stderr line, exit code. |
|
||||
| `logs/game/index.jsonl` | The one-line-per-session index the logs page lists. |
|
||||
| `logs/install.log` | Install pipeline journal, one line per stage. |
|
||||
| `logs/session-log-location.json` | A record of where session logs live and where they used to live. Rewritten on every start. |
|
||||
| `data/agent/sessions/game/…` | **Read-only compatibility**: sessions written by older builds. They are still listed and still openable; nothing is moved and nothing is deleted. |
|
||||
|
||||
The game's own files are not in there — they sit in the instance's run directory: `logs/latest.log`,
|
||||
`crash-reports/crash-*.txt`, and `hs_err_pid*.log`. **`crash-reports/` only exists when the JVM lived long
|
||||
enough to write one.** If a mod, a missing library, or a wrong Java kills the game before Minecraft
|
||||
initialises, the game never gets that far, and the honest evidence is the session JSONL plus
|
||||
`launcher.log` — not a crash report. That is how the game behaves, not something the launcher is
|
||||
hiding.
|
||||
|
||||
### Not done yet
|
||||
|
||||
This list is the reason to believe the rest. None of it is hidden behind marketing copy.
|
||||
@@ -216,7 +241,7 @@ This list is the reason to believe the rest. None of it is hidden behind marketi
|
||||
real `releases/latest/download/manifest.json` was unreadable while `0.2.2` was still a pre-release.
|
||||
The first observation on the live stable channel happens after `0.2.3` ships.
|
||||
- **Several buttons are placeholders.** On the instances page: *New instance*, *Import*, *Duplicate*,
|
||||
*Open folder*, *Delete*. On the logs page: *Open folder*. In the settings frame: *Save*, *Reset
|
||||
*Open folder*, *Delete*. In the settings frame: *Save*, *Reset
|
||||
section*, *Add override*. Each writes `[page] 占位动作 …` to stderr and changes nothing — instance
|
||||
management from the GUI is the instance-wizard work still outstanding, and settings change as you
|
||||
edit them rather than on a Save.
|
||||
|
||||
Reference in new issue
Block a user