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.
Talk, realtime voice, and managed-room code paths use the shared file logger for bounded lifecycle records. These records are intended for operational debugging and OTLP log export; transcript text, audio payloads, turn ids, call ids, and provider item ids are not copied into the log record.
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.