mirror of
https://github.com/storytold/deckcraft.git
synced 2026-10-24 18:46:57 -06:00
The desktop app installed no logger, so every log::warn!/log::error! in the workspace was discarded: the crash guard's panic report, a failed crash-recovery save, PowerPoint parts skipped on import, audio output problems. A launch from a desktop menu has no terminal either, so there was nothing to attach to a bug report. apps/deckcraft/src/logging.rs (no new dependency): - standard error plus <settings dir>/logs/deckcraft.log (beside ui.json and prefs.json); each launch rotates the previous log to deckcraft.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 deckcraft*, 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; a poisoned lock is tolerated - a record holds the lock for one write of an already formatted line The cpal error callback runs on the realtime audio thread (on ALSA in a loop while the device stays broken), so it no longer logs: it keeps the first error without blocking, and the UI thread logs it when the stream stops. The logger is installed first in main (before the engine's panic hook) and the file is opened after argument parsing (--version leaves no file). The settings directory moves out of prefs_path into config_dir. The start-up eprintln!s (sample, files that fail to open, control server) now go through the logger. Documented in README.md (Getting started > Logs). Co-authored-by: Brandon Thomas <echelon@gmail.com>