docs/gateway/logging.md
For a user-facing overview (CLI + Control UI + config), see /logging.
OpenClaw has two log “surfaces”:
At startup, the Gateway logs the resolved default agent model together with the mode defaults that affect new sessions, for example:
agent model: openai-codex/gpt-5.5 (thinking=medium, fast=on)
thinking comes from the default agent, model params, or global agent default;
when it is unset, the startup summary shows medium. fast comes from the
default agent or model fastMode params.
/tmp/openclaw/ (one file per day): openclaw-YYYY-MM-DD.log
logging.maxFileBytes (default: 100 MB), keeping
up to five numbered archives and continuing to write a fresh active file.~/.openclaw/openclaw.json:
logging.filelogging.levelThe file format is one JSON object per line.
The Control UI Logs tab tails this file via the gateway (logs.tail).
CLI can do the same:
openclaw logs --follow
Verbose vs. log levels
logging.level.--verbose only affects console verbosity (and WS log style); it does not
raise the file log level.logging.level to debug or
trace.The CLI captures console.log/info/warn/error/debug/trace and writes them to file logs,
while still printing to stdout/stderr.
You can tune console verbosity independently via:
logging.consoleLevel (default info)logging.consoleStyle (pretty | compact | json)OpenClaw can mask sensitive tokens before log or transcript output leaves the process. This logging redaction policy is applied at console, file-log, OTLP log-record, and session transcript text sinks, so matching secret values are masked before JSONL lines or messages are written to disk.
logging.redactSensitive: off | tools (default: tools)logging.redactPatterns: array of regex strings (overrides defaults)
gi), or /pattern/flags if you need custom flags.***.Some safety boundaries always redact regardless of logging.redactSensitive.
That includes Control UI tool-call events, sessions_history tool output,
diagnostics support exports, provider error observations, exec approval command
display, and Gateway WebSocket protocol logs. These surfaces may still use
logging.redactPatterns as additional patterns, but redactSensitive: "off"
does not make them emit raw secrets.
The gateway prints WebSocket protocol logs in two modes:
--verbose): only “interesting” RPC results are printed:
ok=false)>= 50ms)--verbose): prints all WS request/response traffic.openclaw gateway supports a per-gateway style switch:
--ws-log auto (default): normal mode is optimized; verbose mode uses compact output--ws-log compact: compact output (paired request/response) when verbose--ws-log full: full per-frame output when verbose--compact: alias for --ws-log compactExamples:
# optimized (only errors/slow)
openclaw gateway
# show all WS traffic (paired)
openclaw gateway --verbose --ws-log compact
# show all WS traffic (full meta)
openclaw gateway --verbose --ws-log full
The console formatter is TTY-aware and prints consistent, prefixed lines. Subsystem loggers keep output grouped and scannable.
Behavior:
[gateway], [canvas], [tailscale])TERM/COLORTERM/TERM_PROGRAM), respects NO_COLORgateway/ + channels/, keeps last 2 segments (e.g. whatsapp/outbound){ subsystem })logRaw() for QR/UX output (no prefix, no formatting)pretty | compact | json)logging.level is set to debug/trace)debug (use --verbose to see them)This keeps existing file logs stable while making interactive output scannable.