The application log is what the Arion process says about itself — startup, configuration loading, xDS updates, warnings and errors. Use it to diagnose the gateway; per-request traffic belongs in access logs, which are a separate system.
Enable it
Logging is always on. By default Arion writes to stdout at info level during startup, then applies the level from your configuration. The top-level logging section controls it:
logging:
log_level: "info"
log_level accepts a level (error, warn, info, debug, trace) or a full filter expression with per-module targets, in the same syntax as the RUST_LOG environment variable — for example info,arion_lib=debug raises only the proxy library to debug.
Variations
Set the level from the environment
RUST_LOG always wins over the configuration file:
RUST_LOG=debug arion --config /etc/arion/arion.yaml
The precedence is: RUST_LOG, then logging.log_level, then errors only. Setting the environment variable is the quickest way to turn on debug output for one run without editing the file.
Log to a file
Set log_file to switch output from stdout to a rolling file. log_directory chooses where it goes (default: the working directory). Files rotate hourly.
logging:
log_level: "info"
log_directory: /var/log/arion
log_file: arion.logTimestamps and timezone
Each line carries a microsecond-precision timestamp with a numeric offset, plus the thread name (proxy_RT0, services, ...), which tells you which runtime emitted it. Timestamps are UTC unless you set the top-level timezone section:
timezone:
local: "Europe/Rome"
Any IANA timezone name works and applies to the application log and to access-log %START_TIME% alike. Daylight-saving transitions are tracked automatically.
Verify
Start Arion and check the first lines on stdout:
arion --config /etc/arion/arion.yaml
Expected output includes lines like:
2026-09-28T10:15:04.512345+0000 INFO main arion_proxy::proxy: Launching Service runtime with 1 threads
2026-09-28T10:15:04.514820+0000 INFO main arion_proxy::proxy: Launching 1 Proxy runtime(s) with 4 thread(s) each
If you see nothing after startup, remember the post-startup default without RUST_LOG or logging.log_level is errors only.
Limits
- Output goes to stdout or to one rolling file — there is no syslog or network log shipper; run under systemd or a container runtime and collect it there.
- File output rotates hourly; the schedule is not configurable (unlike access-log rotation).
- Writes are asynchronous and non-blocking; a hard kill can lose the last buffered lines.
- There is no built-in redaction.
debugandtraceare verbose and can include request and configuration details, so keep production atinfoor above and treat debug logs as sensitive.
For the full list of environment variables Arion reads, see the environment variable reference.