Logging
Para un resumen orientado al usuario (CLI + Control UI + configuración), consulta /logging.
OpenClaw tiene dos “superficies” de log:
- Salida de consola (lo que ves en la terminal / Debug UI).
- Logs de archivo (líneas JSON) escritos por el logger del gateway.
Logger basado en archivo
- El archivo de log rotativo por defecto está bajo
/tmp/openclaw/(un archivo por día):openclaw-YYYY-MM-DD.log- La fecha usa la zona horaria local del host del gateway.
- La ruta del archivo de log y el nivel se pueden configurar vía
~/.openclaw/openclaw.json:logging.filelogging.level
El formato del archivo es un objeto JSON por línea.
La pestaña Logs del Control UI hace tail de este archivo vía el gateway (logs.tail).
El CLI puede hacer lo mismo:
openclaw logs --follow
Verbose vs. niveles de log
- Los logs de archivo se controlan exclusivamente por
logging.level. --verbosesolo afecta la verbosidad de la consola (y el estilo de log WS); no eleva el nivel de log del archivo.- Para capturar detalles solo de verbose en logs de archivo, configura
logging.leveladebugotrace.
Captura de consola
El CLI captura console.log/info/warn/error/debug/trace y los escribe en los logs de archivo,
mientras sigue imprimiendo en stdout/stderr.
Puedes ajustar la verbosidad de la consola independientemente vía:
logging.consoleLevel(por defectoinfo)logging.consoleStyle(pretty|compact|json)
Redacción de resúmenes de herramientas
Los resúmenes verbose de herramientas (ej. 🛠️ Exec: ...) pueden enmascarar tokens sensibles antes de que lleguen al
flujo de la consola. Esto es solo para herramientas y no altera los logs de archivo.
logging.redactSensitive:off|tools(por defecto:tools)logging.redactPatterns: array de cadenas regex (sobrescribe los valores por defecto)- Usa cadenas regex sin procesar (
giautomático), o/patron/flagssi necesitas flags personalizadas. - Las coincidencias se enmascaran manteniendo los primeros 6 + últimos 4 caracteres (longitud >= 18), sino
***. - Los valores por defecto cubren asignaciones de claves comunes, flags CLI, campos JSON, cabeceras bearer, bloques PEM y prefijos de tokens populares.
- Usa cadenas regex sin procesar (
Logs WebSocket del Gateway
El gateway imprime logs del protocolo WebSocket en dos modos:
- Modo normal (sin
--verbose): solo se imprimen resultados RPC “interesantes”:- errores (
ok=false) - llamadas lentas (umbral por defecto:
>= 50ms) - errores de parseo
- errores (
- Modo verbose (
--verbose): imprime todo el tráfico de solicitud/respuesta WS.
Estilo de log WS
openclaw gateway soporta un selector de estilo por gateway:
--ws-log auto(por defecto): el modo normal está optimizado; el modo verbose usa salida compacta--ws-log compact: salida compacta (solicitud/respuesta emparejadas) cuando está en verbose--ws-log full: salida completa por frame cuando está en verbose--compact: alias de--ws-log compact
Ejemplos:
# optimizado (solo errores/lentos)
openclaw gateway
# mostrar todo el tráfico WS (emparejado)
openclaw gateway --verbose --ws-log compact
# mostrar todo el tráfico WS (meta completa)
openclaw gateway --verbose --ws-log full
Formato de consola (logging de subsistemas)
El formateador de consola es consciente del TTY e imprime líneas consistentes con prefijo. Los loggers de subsistema mantienen la salida agrupada y escaneable.
Comportamiento:
- Prefijos de subsistema en cada línea (ej.
[gateway],[canvas],[tailscale]) - Colores de subsistema (estables por subsistema) más coloración por nivel
- Color cuando la salida es un TTY o el entorno parece un terminal rico (
TERM/COLORTERM/TERM_PROGRAM), respetaNO_COLOR - Prefijos de subsistema acortados: elimina el
gateway/+channels/inicial, mantiene los últimos 2 segmentos (ej.whatsapp/outbound) - Sub-loggers por subsistema (prefijo automático + campo estructurado
{ subsystem }) logRaw()para salida QR/UX (sin prefijo, sin formato)- Estilos de consola (ej.
pretty | compact | json) - Nivel de log de consola separado del nivel de log de archivo (el archivo mantiene el detalle completo cuando
logging.levelestá configurado endebug/trace) - Los cuerpos de mensajes de WhatsApp se registran a nivel
debug(usa--verbosepara verlos)
Esto mantiene los logs de archivo existentes estables mientras hace la salida interactiva escaneable.