Logging¶
Every ForgeFIRM program logs through the system logger, and the panel's Logs tab is where you set the levels, read the logs, and export them for an issue report. This page tells you how to use it.
Read the Safety page first
ForgeFIRM is not the manufacturer's firmware. Read Safety before you run a job.
The emitters, the relay for stray output, the rsyslog rules, and the line format are in Logging internals.
The loggers¶
Every ForgeFIRM process emits through the system syslog socket, and rsyslog is
the only file writer. It files each program under its own directory,
/data/log/forgefirm/<logger>/, size-capped and rotated.
| Logger | What it holds |
|---|---|
forgectrl |
The machine-services daemon: supervision, cooling, cameras, settings, updates. |
grblhal |
The GRBL controller. |
gfcloud |
The cloud-mode client. |
gfhome |
The camera-referenced homing runner. |
kernel |
The glowforge driver and the rest of the kernel. Its levels only filter what the kernel emits. |
system |
Everything else: SSH, WiFi, time sync, the init scripts. |
A controller's stray output (an interpreter traceback, a library message) reaches the log under the controller's own name.
Log levels¶
Each logger has two independent levels, one for the disk file and one for the
remote target: off, error, warning, notice, info (the disk default),
or debug (remote defaults to off). Levels are cumulative: warning keeps
warnings and errors, debug keeps everything, off writes nothing. A process
emits at the more verbose of its two levels, and rsyslog filters per
destination.
Levels apply at the next reboot. The boot sequence writes the rsyslog
rules from the settings before rsyslog starts, so a change waits for a reboot.
The Logs tab shows the configured level beside the effective one and offers
the reboot. The keys are log_<logger>_disk and log_<logger>_remote
(Settings).
Remote syslog¶
The Logs tab's remote target forwards each logger at its remote level as
RFC 5424 syslog: syslog_server (a host name or address), syslog_port (514),
and syslog_proto (udp or tcp). Nothing is forwarded until a server is set
and at least one logger's remote level is on. An unreachable server never holds
up the machine: undeliverable messages are dropped. Applied at the next reboot.
The log viewer¶
The Logs tab's viewer shows the tail of one logger. Follow keeps it moving; Refresh fetches once. The viewer keeps the last few hundred kilobytes.
Export¶
Export streams a tar.gz of every logger's files plus a system snapshot:
firmware version, kernel ring buffer, uptime, memory, disk, processes, effective
log levels, and the settings with secrets masked.
The bundle is sanitized by default, for attaching to a public issue report. Known identifiers (serial, hostname, cloud credentials, panel token, camera key, WiFi network) and pattern classes (network addresses, e-mail addresses, bearer and basic credentials, JWTs, key=value secrets, long hex and base64 blobs) become placeholders. A placeholder keeps the same number for the same value within the bundle, so hosts can still be told apart. The sanitizer removes what it knows and what it can recognize: skim the bundle before posting it. Untick the option to keep everything for your own use.
The routes¶
| Endpoint | Purpose |
|---|---|
GET /logs |
Loggers with configured and effective levels and on-disk sizes, the remote target, pending_reboot |
GET /logs/tail?name=&lines=&from= |
The last lines of a logger's live file, or everything since byte offset from (incremental follow) |
POST /logs/export?sanitize=1\|0 |
Streams the tar.gz bundle, sanitized by default; it carries the commissioning record as system/commissioning.json (Commissioning) |
All three require a login (The control panel).