Логирование
OpenClaw логирует в двух местах:
- Файловые логи (строки JSON), записываемые Gateway.
- Консольный вывод, показываемый в терминалах и Control UI.
Эта страница объясняет, где находятся логи, как их читать и как настраивать уровни логирования и форматы.
Где находятся логи
По умолчанию Gateway записывает ротируемый файл лога в:
/tmp/openclaw/openclaw-YYYY-MM-DD.log
Дата использует локальный часовой пояс хоста gateway.
Вы можете переопределить это в ~/.openclaw/openclaw.json:
{
"logging": {
"file": "/path/to/openclaw.log"
}
}
Как читать логи
CLI: живой хвост (рекомендуется)
Используйте CLI для хвоста файла лога gateway через RPC:
openclaw logs --follow
Режимы вывода:
- TTY-сессии: красивые, раскрашенные, структурированные строки лога.
- Не-TTY сессии: обычный текст.
- --json: строки JSON с разделителями (одно событие лога на строку).
- --plain: принудительный обычный текст в TTY-сессиях.
- --no-color: отключить ANSI-цвета.
В режиме JSON CLI испускает объекты с тегами type:
- meta: метаданные потока (файл, курсор, размер)
- log: разобранная запись лога
- notice: подсказки усечения / ротации
- raw: неразобранная строка лога
Если Gateway недостижим, CLI выводит короткую подсказку запустить:
openclaw doctor
Control UI (web)
Вкладка Logs в Control UI хвостит тот же файл, используя logs.tail. См. /web/control-ui для того, как открыть его.
Логи только каналов
Для фильтрации активности каналов (WhatsApp/Telegram/и т.д.) используйте:
openclaw channels logs --channel whatsapp
Форматы логов
Файловые логи (JSONL)
Каждая строка в файле лога — это объект JSON. CLI и Control UI разбирают эти записи для рендеринга структурированного вывода (время, уровень, подсистема, сообщение).
Консольный вывод
Консольные логи TTY-aware и отформатированы для читабельности:
- Префиксы подсистемы (например, gateway/channels/whatsapp)
- Раскраска уровней (info/warn/error)
- Опциональный компактный или JSON-режим
Форматирование консоли контролируется logging.consoleStyle.
Настройка логирования
Вся конфигурация логирования находится под logging в ~/.openclaw/openclaw.json.
{
"logging": {
"level": "info",
"file": "/tmp/openclaw/openclaw-YYYY-MM-DD.log",
"consoleLevel": "info",
"consoleStyle": "pretty",
"redactSensitive": "tools",
"redactPatterns": [
"sk-.*"
]
}
}
Уровни логирования
- logging.level: уровень файловых логов (JSONL).
- logging.consoleLevel: уровень подробности консоли.
--verbose влияет только на консольный вывод; он не меняет уровни файловых логов.
Стили консоли
logging.consoleStyle:
- pretty: дружелюбный к человеку, раскрашенный, с временными метками.
- compact: более плотный вывод (лучше для длинных сессий).
- json: JSON на строку (для процессоров логов).
Редактирование
Сводки инструментов могут редактировать чувствительные токены перед тем, как они попадут в консоль:
- logging.redactSensitive: off | tools (по умолчанию: tools)
- logging.redactPatterns: список строк регулярных выражений для переопределения набора по умолчанию
Редактирование влияет только на консольный вывод и не изменяет файловые логи.
Диагностика + OpenTelemetry
Диагностика — это структурированные, машиночитаемые события для запусков модели и телеметрии потока сообщений (вебхуки, очереди, состояние сессии). Они не заменяют логи; они существуют для питания метрик, трассировок и других экспортёров.
События диагностики испускаются внутри процесса, но экспортёры присоединяются только когда диагностика + плагин экспортёра включены.
OpenTelemetry vs OTLP
- OpenTelemetry (OTel): модель данных + SDK для трассировок, метрик и логов.
- OTLP: протокол передачи, используемый для экспорта данных OTel коллектору/бэкенду.
- OpenClaw экспортирует через OTLP/HTTP (protobuf) сегодня.
Экспортируемые сигналы
- Метрики: счётчики + гистограммы (использование токенов, поток сообщений, очереди).
- Трассировки: спаны для использования модели + обработки вебхуков/сообщений.
- Логи: экспортируются через OTLP, когда включено diagnostics.otel.logs. Объём логов может быть высоким; учитывайте logging.level и фильтры экспортёра.
Каталог событий диагностики
Использование модели:
- model.usage: токены, стоимость, продолжительность, контекст, провайдер/модель/канал, ID сессий.
Поток сообщений:
- webhook.received: входящий вебхук по каналу.
- webhook.processed: вебхук обработан + продолжительность.
- webhook.error: ошибки обработчика вебхука.
- message.queued: сообщение поставлено в очередь для обработки.
- message.processed: исход + продолжительность + опциональная ошибка.
Очередь + сессия:
- queue.lane.enqueue: постановка в очередь команд + глубина.
- queue.lane.dequeue: выемка из очереди команд + время ожидания.
- session.state: переход состояния сессии + причина.
- session.stuck: предупреждение о застрявшей сессии + возраст.
- run.attempt: метаданные повтора/попытки запуска.
- diagnostic.heartbeat: агрегированные счётчики (вебхуки/очередь/сессия).
Включить диагностику (без экспортёра)
Используйте это, если вы хотите, чтобы события диагностики были доступны плагинам или пользовательским приёмникам:
{
"diagnostics": {
"enabled": true
}
}
Флаги диагностики (целевые логи)
Используйте флаги для включения дополнительных, целевых отладочных логов без повышения logging.level. Флаги нечувствительны к регистру и поддерживают подстановочные знаки (например, telegram.* или *).
{
"diagnostics": {
"flags": ["telegram.http"]
}
}
Переопределение через переменные окружения (одноразово):
OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload
Примечания:
- Логи флагов идут в стандартный файл лога (тот же, что и logging.file).
- Вывод всё ещё редактируется согласно logging.redactSensitive.
- Полное руководство: /diagnostics/flags.
Экспорт в OpenTelemetry
Диагностика может быть экспортирована через плагин diagnostics-otel (OTLP/HTTP). Это работает с любым OpenTelemetry-коллектором/бэкендом, который принимает OTLP/HTTP.
{
"plugins": {
"allow": ["diagnostics-otel"],
"entries": {
"diagnostics-otel": {
"enabled": true
}
}
},
"diagnostics": {
"enabled": true,
"otel": {
"enabled": true,
"endpoint": "http://otel-collector:4318",
"protocol": "http/protobuf",
"serviceName": "openclaw-gateway",
"traces": true,
"metrics": true,
"logs": true,
"sampleRate": 0.2,
"flushIntervalMs": 60000
}
}
}
Примечания:
- Вы также можете включить плагин с помощью openclaw plugins enable diagnostics-otel.
- protocol в настоящее время поддерживает только http/protobuf. grpc игнорируется.
- Метрики включают использование токенов, стоимость, размер контекста, продолжительность запуска и счётчики/гистограммы потока сообщений (вебхуки, очереди, состояние сессии, глубина/ожидание очереди).
- Трассировки/метрики могут быть переключены с помощью traces / metrics (по умолчанию: вкл). Трассировки включают спаны использования модели плюс спаны обработки вебхуков/сообщений при включении.
- Установите headers, когда ваш коллектор требует авторизацию.
- Поддерживаются переменные окружения: OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_SERVICE_NAME, OTEL_EXPORTER_OTLP_PROTOCOL.
Экспортируемые метрики (имена + типы)
Использование модели:
- openclaw.tokens (счётчик, атрибуты: openclaw.token, openclaw.channel, openclaw.provider, openclaw.model)
- openclaw.cost.usd (счётчик, атрибуты: openclaw.channel, openclaw.provider, openclaw.model)
- openclaw.run.duration_ms (гистограмма, атрибуты: openclaw.channel, openclaw.provider, openclaw.model)
- openclaw.context.tokens (гистограмма, атрибуты: openclaw.context, openclaw.channel, openclaw.provider, openclaw.model)
Поток сообщений:
- openclaw.webhook.received (счётчик, атрибуты: openclaw.channel, openclaw.webhook)
- openclaw.webhook.error (счётчик, атрибуты: openclaw.channel, openclaw.webhook)
- openclaw.webhook.duration_ms (гистограмма, атрибуты: openclaw.channel, openclaw.webhook)
- openclaw.message.queued (счётчик, атрибуты: openclaw.channel, openclaw.source)
- openclaw.message.processed (счётчик, атрибуты: openclaw.channel, openclaw.outcome)
- openclaw.message.duration_ms (гистограмма, атрибуты: openclaw.channel, openclaw.outcome)
Очереди + сессии:
- openclaw.queue.lane.enqueue (счётчик, атрибуты: openclaw.lane)
- openclaw.queue.lane.dequeue (счётчик, атрибуты: openclaw.lane)
- openclaw.queue.depth (гистограмма, атрибуты: openclaw.lane или openclaw.channel=heartbeat)
- openclaw.queue.wait_ms (гистограмма, атрибуты: openclaw.lane)
- openclaw.session.state (счётчик, атрибуты: openclaw.state, openclaw.reason)
- openclaw.session.stuck (счётчик, атрибуты: openclaw.state)
- openclaw.session.stuck_age_ms (гистограмма, атрибуты: openclaw.state)
- openclaw.run.attempt (счётчик, атрибуты: openclaw.attempt)
Экспортируемые спаны (имена + ключевые атрибуты)
- openclaw.model.usage
- openclaw.channel, openclaw.provider, openclaw.model
- openclaw.sessionKey, openclaw.sessionId
- openclaw.tokens.* (input/output/cache_read/cache_write/total)
- openclaw.webhook.processed
- openclaw.channel, openclaw.webhook, openclaw.chatId
- openclaw.webhook.error
- openclaw.channel, openclaw.webhook, openclaw.chatId, openclaw.error
- openclaw.message.processed
- openclaw.channel, openclaw.outcome, openclaw.chatId, openclaw.messageId, openclaw.sessionKey, openclaw.sessionId, openclaw.reason
- openclaw.session.stuck
- openclaw.state, openclaw.ageMs, openclaw.queueDepth, openclaw.sessionKey, openclaw.sessionId
Выборка + сброс
- Выборка трассировок: diagnostics.otel.sampleRate (0.0–1.0, только корневые спаны).
- Интервал экспорта метрик: diagnostics.otel.flushIntervalMs (мин 1000мс).
Примечания по протоколу
- Конечные точки OTLP/HTTP могут быть установлены через diagnostics.otel.endpoint или OTEL_EXPORTER_OTLP_ENDPOINT.
- Если конечная точка уже содержит /v1/traces или /v1/metrics, она используется как есть.
- Если конечная точка уже содержит /v1/logs, она используется как есть для логов.
- diagnostics.otel.logs включает экспорт OTLP-логов для вывода основного логгера.
Поведение экспорта логов
- OTLP-логи используют те же структурированные записи, записываемые в logging.file.
- Уважают logging.level (уровень файлового лога). Консольное редактирование не применяется к OTLP-логам.
- Установки с высоким объёмом должны предпочесть выборку/фильтрацию OTLP-коллектора.
Советы по устранению неполадок
- Gateway недостижим? Сначала запустите openclaw doctor.
- Логи пусты? Проверьте, что Gateway запущен и записывает в путь файла в logging.file.
- Нужны больше подробностей? Установите logging.level в debug или trace и повторите.