Runtime logs
Settings → Runtime Logs is both the log level switch and a live log viewer.
Subtitle: "View and configure application diagnostic logs. Logs are written to local files and kept in memory for live viewing."
Log level
One dropdown, six steps:
| Level | Notes |
|---|---|
| Off | Nothing recorded |
| Error | Errors only |
| Warning | |
| Info (default) | |
| Debug | Records more, and the logs get bigger |
| Trace | Most detailed |
Changes are applied live through tracing's reload handle; no restart needed. They stay in sync across windows. A failed save reports "Failed to save log level".
Environment variables lock this section
As soon as CROLI_LOG or RUST_LOG holds a non-empty value, the dropdown and the whole Per-module overrides block below it grey out, and an amber notice appears:
Log level is controlled by the RUST_LOG / CROLI_LOG environment variable; change it there to take effect.
When both are set, CROLI_LOG wins.
Per-module overrides
Set a level for one module without touching the global one. Click Add to append a row; each row is a module name plus a level.
- The module name is free text, with suggestions:
croli_lib::acp,croli_lib::acp::delegation,croli_lib::web,croli_lib::chat_channel,croli_lib::db. - The format must be a Rust module path like
a::b::c(letters, digits, underscores and::only). Invalid input gets a red border and is not written into the saved config. - Saves on blur. The icon button on the right removes the row.
Empty by default.
A few modules carry hard-coded ceilings that neither the UI nor
RUST_LOGcan lift —agent_client_protocolandsqlx::query, for instance, top out at Warn. This keeps them from flooding the log.
Recent logs
Live view of recent log records.
Toolbar:
- Pause / Live — toggles the log subscription; Live by default.
- Refresh — re-fetches the latest 5000 records.
- Clear — clears the screen only; it does not touch the backend buffer and does not delete files.
- Open folder (desktop only) — reveals the log directory in the system file manager.
Filters:
- Search box — case-insensitive match against the message and the target.
- Level dropdown — All levels (default) / Error+ / Warning+ / Info+ / Debug+ / Trace+. This only filters what you see; it does not change which level is captured and written to the files.
On the right it reads "x / y shown". The list keeps at most 5000 rows. Each row is a timestamp, a level badge, the target and the message; rows with spans or fields can be expanded to show a spans: breadcrumb and a key-value table.
Auto-scroll only follows new records when you are already near the bottom — scrolling back through history will not be dragged away by new logs.
Log files (Web / server mode only)
The desktop does not show this section (use Open folder above there).
Download complete log files from disk to see history beyond the live buffer. Each file shows its name, its size and a Download button.
Files over 16 MiB download only their latest stretch, with the name changed to *.tail.log and the notice "File is large; downloaded the latest {size}. The full file is in the logs directory."
Where the logs live
The directory is resolved in this order:
CROLI_LOG_DIR → $CROLI_HOME/logs → $CROLI_DATA_DIR/logs → ~/.croli/logs
- In-memory ring buffer — 5000 records and 4 MiB, whichever ceiling is reached first.
- Disk — rotated daily, 30 files kept by default, adjustable with
CROLI_LOG_MAX_FILES. - Single-file read ceiling — 16 MiB (where that truncation notice comes from).
Worth knowing
- Clear only clears the screen in front of you. To actually free space, delete the files in the log directory, or lower
CROLI_LOG_MAX_FILES. - Debug or Trace noticeably increases disk writes; set it back to Info once you are done digging.
- A level change reaches every window, so two settings windows open at once will not fight over it.