mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-25 12:33:04 +00:00
* refactor: remove stale file-backed shims * fix: harden sqlite state ci boundaries * refactor: store matrix idb snapshots in sqlite * fix: satisfy rebased CI guardrails * refactor: store current conversation bindings in sqlite table * refactor: store tui last sessions in sqlite table * refactor: reset sqlite schema history * refactor: drop unshipped sqlite table migration * refactor: remove plugin index file rollback * refactor: drop unshipped sqlite sidecar migrations * refactor: remove runtime commitments kv migration * refactor: preserve kysely sync result types * refactor: drop unshipped sqlite schema migration table * test: keep session usage coverage sqlite-backed * refactor: keep sqlite migration doctor-only * refactor: isolate device legacy imports * refactor: isolate push voicewake legacy imports * refactor: isolate remaining runtime legacy imports * refactor: tighten sqlite migration guardrails * test: cover sqlite persisted enum parsing * refactor: isolate legacy update and tui imports * refactor: tighten sqlite state ownership * refactor: move legacy imports behind doctor * refactor: remove legacy session row lookup * refactor: canonicalize memory transcript locators * refactor: drop transcript path scope fallbacks * refactor: drop runtime legacy session delivery pruning * refactor: store tts prefs only in sqlite * refactor: remove cron store path runtime * refactor: use cron sqlite store keys * refactor: rename telegram message cache scope * refactor: read memory dreaming status from sqlite * refactor: rename cron status store key * refactor: stop remembering transcript file paths * test: use sqlite locators in agent fixtures * refactor: remove file-shaped commitments and cron store surfaces * refactor: keep compaction transcript handles out of session rows * refactor: derive transcript handles from session identity * refactor: derive runtime transcript handles * refactor: remove gateway session locator reads * refactor: remove transcript locator from session rows * refactor: store raw stream diagnostics in sqlite * refactor: remove file-shaped transcript rotation * refactor: hide legacy trajectory paths from runtime * refactor: remove runtime transcript file bridges * refactor: repair database-first rebase fallout * refactor: align tests with database-first state * refactor: remove transcript file handoffs * refactor: sync post-compaction memory by transcript scope * refactor: run codex app-server sessions by id * refactor: bind codex runtime state by session id * refactor: pass memory transcripts by sqlite scope * refactor: remove transcript locator cleanup leftovers * test: remove stale transcript file fixtures * refactor: remove transcript locator test helper * test: make cron sqlite keys explicit * test: remove cron runtime store paths * test: remove stale session file fixtures * test: use sqlite cron keys in diagnostics * refactor: remove runtime delivery queue backfill * test: drop fake export session file mocks * refactor: rename acp session read failure flag * refactor: rename acp row session key * refactor: remove session store test seams * refactor: move legacy session parser tests to doctor * refactor: reindex managed memory in place * refactor: drop stale session store wording * refactor: rename session row helpers * refactor: rename sqlite session entry modules * refactor: remove transcript locator leftovers * refactor: trim file-era audit wording * refactor: clean managed media through sqlite * fix: prefer explicit agent for exports * fix: use prepared agent for session resets * fix: canonicalize legacy codex binding import * test: rename state cleanup helper * docs: align backup docs with sqlite state * refactor: drop legacy Pi usage auth fallback * refactor: move legacy auth profile imports to doctor * refactor: keep Pi model discovery auth in memory * refactor: remove MSTeams legacy learning key fallback * refactor: store model catalog config in sqlite * refactor: use sqlite model catalog at runtime * refactor: remove model json compatibility aliases * refactor: store auth profiles in sqlite * refactor: seed copied auth profiles in sqlite * refactor: make auth profile runtime sqlite-addressed * refactor: migrate hermes secrets into sqlite auth store * refactor: move plugin install config migration to doctor * refactor: rename plugin index audit checks * test: drop auth file assumptions * test: remove legacy transcript file assertions * refactor: drop legacy cli session aliases * refactor: store skill uploads in sqlite * refactor: keep subagent attachments in sqlite vfs * refactor: drop subagent attachment cleanup state * refactor: move legacy session aliases to doctor * refactor: require node 24 for sqlite state runtime * refactor: move provider caches into sqlite state * fix: harden virtual agent filesystem * refactor: enforce database-first runtime state * refactor: rename compaction transcript rotation setting * test: clean sqlite refactor test types * refactor: consolidate sqlite runtime state * refactor: model session conversations in sqlite * refactor: stop deriving cron delivery from session keys * refactor: stop classifying sessions from key shape * refactor: hydrate announce targets from typed delivery * refactor: route heartbeat delivery from typed sqlite context * refactor: tighten typed sqlite session routing * refactor: remove session origin routing shadow * refactor: drop session origin shadow fixtures * perf: query sqlite vfs paths by prefix * refactor: use typed conversation metadata for sessions * refactor: prefer typed session routing metadata * refactor: require typed session routing metadata * refactor: resolve group tool policy from typed sessions * refactor: delete dead session thread info bridge * Show Codex subscription reset times in channel errors (#80456) * feat(plugin-sdk): consolidate session workflow APIs * fix(agents): allow read-only agent mount reads * [codex] refresh plugin regression fixtures * fix(agents): restore compaction gateway logs * test: tighten gateway startup assertions * Redact persisted secret-shaped payloads [AI] (#79006) * test: tighten device pair notify assertions * test: tighten hermes secret assertions * test: assert matrix client error shapes * test: assert config compat warnings * fix(heartbeat): remap cron-run exec events to session keys (#80214) * fix(codex): route btw through native side threads * fix(auth): accept friendly OpenAI order for Codex profiles * fix(codex): rotate auth profiles inside harness * fix: keep browser status page probe within timeout * test: assert agents add outputs * test: pin cron read status * fix(agents): avoid Pi resource discovery stalls Co-authored-by: dataCenter430 <titan032000@gmail.com> * fix: retire timed-out codex app-server clients * test: tighten qa lab runtime assertions * test: check security fix outputs * test: verify extension runtime messages * feat(wake): expose typed sessionKey on wake protocol + system event CLI * fix(gateway): await session_end during shutdown drain and track channel + compaction lifecycle paths (#57790) * test: guard talk consult call helper * fix(codex): scale context engine projection (#80761) * fix(codex): scale context engine projection * fix: document Codex context projection scaling * fix: document Codex context projection scaling * fix: document Codex context projection scaling * fix: document Codex context projection scaling * chore: align Codex projection changelog * chore: realign Codex projection changelog * fix: isolate Codex projection patch --------- Co-authored-by: Eva (agent) <eva+agent-78055@100yen.org> Co-authored-by: Josh Lehman <josh@martian.engineering> * refactor: move agent runtime state toward piless * refactor: remove cron session reaper * refactor: move session management to sqlite * refactor: finish database-first state migration * chore: refresh generated sqlite db types * refactor: remove stale file-backed shims * test: harden kysely type coverage # Conflicts: # .agents/skills/kysely-database-access/SKILL.md # src/infra/kysely-sync.types.test.ts # src/proxy-capture/store.sqlite.test.ts # src/state/openclaw-agent-db.test.ts # src/state/openclaw-state-db.test.ts * refactor: remove cron store path runtime * refactor: keep compaction transcript handles out of session rows * refactor: derive embedded transcripts from sqlite identity * refactor: remove embedded transcript locator handoff * refactor: remove runtime transcript file bridges * refactor: remove transcript file handoffs * refactor: remove MSTeams legacy learning key fallback * refactor: store model catalog config in sqlite * refactor: use sqlite model catalog at runtime # Conflicts: # docs/cli/secrets.md # docs/gateway/authentication.md # docs/gateway/secrets.md * fix: keep oauth sibling sync sqlite-local # Conflicts: # src/commands/onboard-auth.test.ts * refactor: remove task session store maintenance # Conflicts: # src/commands/tasks.ts * refactor: keep diagnostics in state sqlite * refactor: enforce database-first runtime state * refactor: consolidate sqlite runtime state * Show Codex subscription reset times in channel errors (#80456) * fix(codex): refresh subscription limit resets * fix(codex): format reset times for channels * Update CHANGELOG with latest changes and fixes Updated CHANGELOG with recent fixes and improvements. * fix(codex): keep command load failures on codex surface * fix(codex): format account rate limits as rows * fix(codex): summarize account limits as usage status * fix(codex): simplify account limit status * test: tighten subagent announce queue assertion * test: tighten session delete lifecycle assertions * test: tighten cron ops assertions * fix: track cron execution milestones * test: tighten hermes secret assertions * test: assert matrix sync store payloads * test: assert config compat warnings * fix(codex): align btw side thread semantics * fix(codex): honor codex fallback blocking * fix(agents): avoid Pi resource discovery stalls * test: tighten codex event assertions * test: tighten cron assertions * Fix Codex app-server OAuth harness auth * refactor: move agent runtime state toward piless * refactor: move device and push state to sqlite * refactor: move runtime json state imports to doctor * refactor: finish database-first state migration * chore: refresh generated sqlite db types * refactor: clarify cron sqlite store keys * refactor: remove stale file-backed shims * refactor: bind codex runtime state by session id * test: expect sqlite trajectory branch export * refactor: rename session row helpers * fix: keep legacy device identity import in doctor * refactor: enforce database-first runtime state * refactor: consolidate sqlite runtime state * build: align pi contract wrappers * chore: repair database-first rebase * refactor: remove session file test contracts * test: update gateway session expectations * refactor: stop routing from session compatibility shadows * refactor: stop persisting session route shadows * refactor: use typed delivery context in clients * refactor: stop echoing session route shadows * refactor: repair embedded runner rebase imports # Conflicts: # src/agents/pi-embedded-runner/run/attempt.tool-call-argument-repair.ts * refactor: align pi contract imports * refactor: satisfy kysely sync helper guard * refactor: remove file transcript bridge remnants * refactor: remove session locator compatibility * refactor: remove session file test contracts * refactor: keep rebase database-first clean * refactor: remove session file assumptions from e2e * docs: clarify database-first goal state * test: remove legacy store markers from sqlite runtime tests * refactor: remove legacy store assumptions from runtime seams * refactor: align sqlite runtime helper seams * test: update memory recall sqlite audit mock * refactor: align database-first runtime type seams * test: clarify doctor cron legacy store names * fix: preserve sqlite session route projections * test: fix copilot token cache test syntax * docs: update database-first proof status * test: align database-first test fixtures * docs: update database-first proof status * refactor: clean extension database-first drift * test: align agent session route proof * test: clarify doctor legacy path fixtures * chore: clean database-first changed checks * chore: repair database-first rebase markers * build: allow baileys git subdependency * chore: repair exp-vfs rebase drift * chore: finish exp-vfs rebase cleanup * chore: satisfy rebase lint drift * chore: fix qqbot rebase type seam * chore: fix rebase drift leftovers * fix: keep auth profile oauth secrets out of sqlite * fix: repair rebase drift tests * test: stabilize pairing request ordering * test: use source manifests in plugin contract checks * fix: restore gateway session metadata after rebase * fix: repair database-first rebase drift * fix: clean up database-first rebase fallout * test: stabilize line quick reply receipt time * fix: repair extension rebase drift * test: keep transcript redaction tests sqlite-backed * fix: carry injected transcript redaction through sqlite * chore: clean database branch rebase residue * fix: repair database branch CI drift * fix: repair database branch CI guard drift * fix: stabilize oauth tls preflight test * test: align database branch fast guards * test: repair build artifact boundary guards * chore: clean changelog rebase markers --------- Co-authored-by: pashpashpash <nik@vault77.ai> Co-authored-by: Eva <eva@100yen.org> Co-authored-by: stainlu <stainlu@newtype-ai.org> Co-authored-by: Jason Zhou <jason.zhou.design@gmail.com> Co-authored-by: Ruben Cuevas <hi@rubencu.com> Co-authored-by: Pavan Kumar Gondhi <pavangondhi@gmail.com> Co-authored-by: Shakker <shakkerdroid@gmail.com> Co-authored-by: Kaspre <36520309+Kaspre@users.noreply.github.com> Co-authored-by: dataCenter430 <titan032000@gmail.com> Co-authored-by: Kaspre <kaspre@gmail.com> Co-authored-by: pandadev66 <nova.full.stack@outlook.com> Co-authored-by: Eva <admin@100yen.org> Co-authored-by: Eva (agent) <eva+agent-78055@100yen.org> Co-authored-by: Josh Lehman <josh@martian.engineering> Co-authored-by: jeffjhunter <support@aipersonamethod.com>
319 lines
12 KiB
Markdown
319 lines
12 KiB
Markdown
---
|
|
summary: "File logs, console output, CLI tailing, and the Control UI Logs tab"
|
|
read_when:
|
|
- You need a beginner-friendly overview of OpenClaw logging
|
|
- You want to configure log levels, formats, or redaction
|
|
- You are troubleshooting and need to find logs quickly
|
|
title: "Logging"
|
|
---
|
|
|
|
OpenClaw has two main log surfaces:
|
|
|
|
- **File logs** (JSON lines) written by the Gateway.
|
|
- **Console output** shown in terminals and the Gateway Debug UI.
|
|
|
|
The Control UI **Logs** tab tails the gateway file log. This page explains where
|
|
logs live, how to read them, and how to configure log levels and formats.
|
|
|
|
## Where logs live
|
|
|
|
By default, the Gateway writes a rolling log file under:
|
|
|
|
`/tmp/openclaw/openclaw-YYYY-MM-DD.log`
|
|
|
|
The date uses the gateway host's local timezone.
|
|
|
|
Each file rotates when it reaches `logging.maxFileBytes` (default: 100 MB).
|
|
OpenClaw keeps up to five numbered archives beside the active file, such as
|
|
`openclaw-YYYY-MM-DD.1.log`, and keeps writing to a fresh active log instead of
|
|
suppressing diagnostics.
|
|
|
|
You can override this in `~/.openclaw/openclaw.json`:
|
|
|
|
```json
|
|
{
|
|
"logging": {
|
|
"file": "/path/to/openclaw.log"
|
|
}
|
|
}
|
|
```
|
|
|
|
## How to read logs
|
|
|
|
### CLI: live tail (recommended)
|
|
|
|
Use the CLI to tail the gateway log file via RPC:
|
|
|
|
```bash
|
|
openclaw logs --follow
|
|
```
|
|
|
|
Useful current options:
|
|
|
|
- `--local-time`: render timestamps in your local timezone
|
|
- `--url <url>` / `--token <token>` / `--timeout <ms>`: standard Gateway RPC flags
|
|
- `--expect-final`: agent-backed RPC final-response wait flag (accepted here via the shared client layer)
|
|
|
|
Output modes:
|
|
|
|
- **TTY sessions**: pretty, colorized, structured log lines.
|
|
- **Non-TTY sessions**: plain text.
|
|
- `--json`: line-delimited JSON (one log event per line).
|
|
- `--plain`: force plain text in TTY sessions.
|
|
- `--no-color`: disable ANSI colors.
|
|
|
|
When you pass an explicit `--url`, the CLI does not auto-apply config or
|
|
environment credentials; include `--token` yourself if the target Gateway
|
|
requires auth.
|
|
|
|
In JSON mode, the CLI emits `type`-tagged objects:
|
|
|
|
- `meta`: stream metadata (file, cursor, size)
|
|
- `log`: parsed log entry
|
|
- `notice`: truncation / rotation hints
|
|
- `raw`: unparsed log line
|
|
|
|
If the implicit local loopback Gateway asks for pairing, closes during connect,
|
|
or times out before `logs.tail` answers, `openclaw logs` falls back to the
|
|
configured Gateway file log automatically. Explicit `--url` targets do not use
|
|
this fallback.
|
|
|
|
If the Gateway is unreachable, the CLI prints a short hint to run:
|
|
|
|
```bash
|
|
openclaw doctor
|
|
```
|
|
|
|
### Control UI (web)
|
|
|
|
The Control UI's **Logs** tab tails the same file using `logs.tail`.
|
|
See [Control UI](/web/control-ui) for how to open it.
|
|
|
|
### Channel-only logs
|
|
|
|
To filter channel activity (WhatsApp/Telegram/etc), use:
|
|
|
|
```bash
|
|
openclaw channels logs --channel whatsapp
|
|
```
|
|
|
|
## Log formats
|
|
|
|
### File logs (JSONL)
|
|
|
|
Each line in the log file is a JSON object. The CLI and Control UI parse these
|
|
entries to render structured output (time, level, subsystem, message).
|
|
|
|
File-log JSONL records also include machine-filterable top-level fields when
|
|
available:
|
|
|
|
- `hostname`: gateway host name.
|
|
- `message`: flattened log message text for full-text search.
|
|
- `agent_id`: active agent id when the log call carries agent context.
|
|
- `session_id`: active session id/key when the log call carries session context.
|
|
- `channel`: active channel when the log call carries channel context.
|
|
|
|
OpenClaw preserves the original structured log arguments alongside these fields
|
|
so existing parsers that read numbered tslog argument keys keep working.
|
|
|
|
Talk, realtime voice, and managed-room activity emits bounded lifecycle log
|
|
records through this same file-log pipeline. These records include event type,
|
|
mode, transport, provider, and size/timing measurements when available, but omit
|
|
transcript text, audio payloads, turn ids, call ids, and provider item ids.
|
|
|
|
### Console output
|
|
|
|
Console logs are **TTY-aware** and formatted for readability:
|
|
|
|
- Subsystem prefixes (e.g. `gateway/channels/whatsapp`)
|
|
- Level coloring (info/warn/error)
|
|
- Optional compact or JSON mode
|
|
|
|
Console formatting is controlled by `logging.consoleStyle`.
|
|
|
|
### Gateway WebSocket logs
|
|
|
|
`openclaw gateway` also has WebSocket protocol logging for RPC traffic:
|
|
|
|
- normal mode: only interesting results (errors, parse errors, slow calls)
|
|
- `--verbose`: all request/response traffic
|
|
- `--ws-log auto|compact|full`: pick the verbose rendering style
|
|
- `--compact`: alias for `--ws-log compact`
|
|
|
|
Examples:
|
|
|
|
```bash
|
|
openclaw gateway
|
|
openclaw gateway --verbose --ws-log compact
|
|
openclaw gateway --verbose --ws-log full
|
|
```
|
|
|
|
## Configuring logging
|
|
|
|
All logging configuration lives under `logging` in `~/.openclaw/openclaw.json`.
|
|
|
|
```json
|
|
{
|
|
"logging": {
|
|
"level": "info",
|
|
"file": "/tmp/openclaw/openclaw-YYYY-MM-DD.log",
|
|
"consoleLevel": "info",
|
|
"consoleStyle": "pretty",
|
|
"redactSensitive": "tools",
|
|
"redactPatterns": ["sk-.*"]
|
|
}
|
|
}
|
|
```
|
|
|
|
### Log levels
|
|
|
|
- `logging.level`: **file logs** (JSONL) level.
|
|
- `logging.consoleLevel`: **console** verbosity level.
|
|
|
|
You can override both via the **`OPENCLAW_LOG_LEVEL`** environment variable (e.g. `OPENCLAW_LOG_LEVEL=debug`). The env var takes precedence over the config file, so you can raise verbosity for a single run without editing `openclaw.json`. You can also pass the global CLI option **`--log-level <level>`** (for example, `openclaw --log-level debug gateway run`), which overrides the environment variable for that command.
|
|
|
|
`--verbose` only affects console output and WS log verbosity; it does not change
|
|
file log levels.
|
|
|
|
### Targeted model transport diagnostics
|
|
|
|
When debugging provider calls, use targeted environment flags instead of raising
|
|
all logs to `debug`:
|
|
|
|
```bash
|
|
OPENCLAW_DEBUG_MODEL_TRANSPORT=1 openclaw gateway
|
|
OPENCLAW_DEBUG_MODEL_PAYLOAD=tools OPENCLAW_DEBUG_SSE=events openclaw gateway
|
|
```
|
|
|
|
Available flags:
|
|
|
|
- `OPENCLAW_DEBUG_MODEL_TRANSPORT=1`: emit request start, fetch response, SDK
|
|
headers, first streaming event, stream completion, and transport errors at
|
|
`info` level.
|
|
- `OPENCLAW_DEBUG_MODEL_PAYLOAD=summary`: include a bounded request payload
|
|
summary in model request logs.
|
|
- `OPENCLAW_DEBUG_MODEL_PAYLOAD=tools`: include all model-facing tool names in
|
|
the payload summary.
|
|
- `OPENCLAW_DEBUG_MODEL_PAYLOAD=full-redacted`: include a redacted, capped JSON
|
|
payload snapshot. Use only while debugging; secrets are redacted but prompts
|
|
and message text may still be present.
|
|
- `OPENCLAW_DEBUG_SSE=events`: emit first-event and stream-completion timing.
|
|
- `OPENCLAW_DEBUG_SSE=peek`: also emit the first five redacted SSE event
|
|
payloads, capped per event.
|
|
- `OPENCLAW_DEBUG_CODE_MODE=1`: emit code-mode model-surface diagnostics,
|
|
including when native provider tools are hidden because code mode owns the
|
|
tool surface.
|
|
|
|
These flags log through normal OpenClaw logging, so `openclaw logs --follow`
|
|
and the Control UI Logs tab show them. Without the flags, the same diagnostics
|
|
remain available at `debug` level.
|
|
|
|
### Trace correlation
|
|
|
|
File logs are JSONL. When a log call carries a valid diagnostic trace context,
|
|
OpenClaw writes the trace fields as top-level JSON keys (`traceId`, `spanId`,
|
|
`parentSpanId`, `traceFlags`) so external log processors can correlate the line
|
|
with OTEL spans and provider `traceparent` propagation.
|
|
|
|
Gateway HTTP requests and Gateway WebSocket frames establish an internal request
|
|
trace scope. Logs and diagnostic events emitted inside that async scope inherit
|
|
the request trace when they do not pass an explicit trace context. Agent run and
|
|
model-call traces become children of the active request trace, so local logs,
|
|
diagnostic snapshots, OTEL spans, and trusted provider `traceparent` headers can
|
|
be joined by `traceId` without logging raw request or model content.
|
|
|
|
Talk lifecycle log records also flow to OTLP logs when OpenTelemetry log export
|
|
is enabled, using the same bounded attributes as file logs.
|
|
|
|
### Model call size and timing
|
|
|
|
Model-call diagnostics record bounded request/response measurements without
|
|
capturing raw prompt or response content:
|
|
|
|
- `requestPayloadBytes`: UTF-8 byte size of the final model request payload
|
|
- `responseStreamBytes`: UTF-8 byte size of streamed model response events
|
|
- `timeToFirstByteMs`: elapsed time before the first streamed response event
|
|
- `durationMs`: total model-call duration
|
|
|
|
These fields are available to diagnostic snapshots, model-call plugin hooks, and
|
|
OTEL model-call spans/metrics when diagnostics export is enabled.
|
|
|
|
### Console styles
|
|
|
|
`logging.consoleStyle`:
|
|
|
|
- `pretty`: human-friendly, colored, with timestamps.
|
|
- `compact`: tighter output (best for long sessions).
|
|
- `json`: JSON per line (for log processors).
|
|
|
|
### Redaction
|
|
|
|
OpenClaw can redact sensitive tokens before they hit console output, file logs,
|
|
OTLP log records, persisted session transcript text, or Control UI tool
|
|
event payloads (tool start args, partial/final result payloads, derived
|
|
exec output, and patch summaries):
|
|
|
|
- `logging.redactSensitive`: `off` | `tools` (default: `tools`)
|
|
- `logging.redactPatterns`: list of regex strings to override the default set. Custom patterns apply on top of the built-in defaults for Control UI tool payloads, so adding a pattern never weakens redaction of values already caught by the defaults.
|
|
|
|
File logs stay JSONL; OpenClaw-owned session transcripts are SQLite rows.
|
|
Matching secret values are masked before the log line or transcript message is
|
|
written. Redaction is best-effort: it applies to text-bearing message content
|
|
and log strings, not every identifier or binary payload field.
|
|
|
|
The built-in defaults cover common API credentials and payment-credential field
|
|
names such as card number, CVC/CVV, shared payment token, and payment credential
|
|
when they appear as JSON fields, URL parameters, CLI flags, or assignments.
|
|
|
|
`logging.redactSensitive: "off"` only disables this general log/transcript
|
|
policy. OpenClaw still redacts safety-boundary payloads that can be shown to UI
|
|
clients, support bundles, diagnostics observers, approval prompts, or agent
|
|
tools. Examples include Control UI tool-call events, `sessions_history` output,
|
|
diagnostics support exports, provider error observations, exec approval command
|
|
display, and Gateway WebSocket protocol logs. Custom `logging.redactPatterns`
|
|
can still add project-specific patterns on those surfaces.
|
|
|
|
## Diagnostics and OpenTelemetry
|
|
|
|
Diagnostics are structured, machine-readable events for model runs and
|
|
message-flow telemetry (webhooks, queueing, session state). They do **not**
|
|
replace logs — they feed metrics, traces, and exporters. Events are emitted
|
|
in-process whether or not you export them.
|
|
|
|
Two adjacent surfaces:
|
|
|
|
- **OpenTelemetry export** — send metrics, traces, and logs over OTLP/HTTP to
|
|
any OpenTelemetry-compatible collector or backend (Grafana, Datadog,
|
|
Honeycomb, New Relic, Tempo, etc.). Full configuration, signal catalog,
|
|
metric/span names, env vars, and privacy model live on a dedicated page:
|
|
[OpenTelemetry export](/gateway/opentelemetry).
|
|
- **Diagnostics flags** — targeted debug-log flags that route extra logs to
|
|
`logging.file` without raising `logging.level`. Flags are case-insensitive
|
|
and support wildcards (`telegram.*`, `*`). Configure under `diagnostics.flags`
|
|
or via the `OPENCLAW_DIAGNOSTICS=...` env override. Full guide:
|
|
[Diagnostics flags](/diagnostics/flags).
|
|
|
|
To enable diagnostics events for plugins or custom sinks without OTLP export:
|
|
|
|
```json5
|
|
{
|
|
diagnostics: { enabled: true },
|
|
}
|
|
```
|
|
|
|
For OTLP export to a collector, see [OpenTelemetry export](/gateway/opentelemetry).
|
|
|
|
## Troubleshooting tips
|
|
|
|
- **Gateway not reachable?** Run `openclaw doctor` first.
|
|
- **Logs empty?** Check that the Gateway is running and writing to the file path
|
|
in `logging.file`.
|
|
- **Need more detail?** Set `logging.level` to `debug` or `trace` and retry.
|
|
|
|
## Related
|
|
|
|
- [OpenTelemetry export](/gateway/opentelemetry) — OTLP/HTTP export, metric/span catalog, privacy model
|
|
- [Diagnostics flags](/diagnostics/flags) — targeted debug-log flags
|
|
- [Gateway logging internals](/gateway/logging) — WS log styles, subsystem prefixes, and console capture
|
|
- [Configuration reference](/gateway/configuration-reference#diagnostics) — full `diagnostics.*` field reference
|