mirror of
https://github.com/storytold/gridcraft.git
synced 2026-10-27 20:26:48 -06:00
The desktop app installed no logger, so every log::warn!/log::error! in the workspace was discarded (a sample that failed to build, wgpu and naga warnings), and panics a command's guard recovered from only reached standard error. A launch from a desktop menu has no terminal either, so there was nothing to attach to a bug report. apps/gridcraft/src/logging.rs (no new dependency): - standard error plus logs/gridcraft.log next to ui.json and prefs.json (~/.config/gridcraft/logs, or under $XDG_CONFIG_HOME); each launch rotates the previous log to gridcraft.1.log and .2.log, so the log of a run that crashed survives the next start; the file is capped at 16 MiB - records logged before the settings directory is known are buffered (bounded) and written once the file is attached - default levels: info for gridcraft*, warn for everything else; RUST_LOG replaces them with env_logger-style directives - never panics: an unusable directory or a failed write leaves standard error as the only sink - runs with GRIDCRAFT_NO_PREFS (agents' test runs) log to standard error only, so they don't rotate away the user's own logs The logger is installed first in main, followed by a panic hook that reports every panic, caught or not, through log::error! (with a backtrace when RUST_BACKTRACE is set). The file is opened after argument parsing (--version leaves no file). The start-up messages in main and the control channel's go through the logger. Documented in README.md (Logs).