Logging
OpenClaw ma dwie główne powierzchnie logów:- Logi plikowe (linie JSON) zapisywane przez Gateway.
- Dane wyjściowe konsoli wyświetlane w terminalach i w Gateway Debug UI.
Gdzie znajdują się logi
Domyślnie Gateway zapisuje rotowany plik logu w:/tmp/openclaw/openclaw-YYYY-MM-DD.log
Data używa lokalnej strefy czasowej hosta gateway.
Możesz to nadpisać w ~/.openclaw/openclaw.json:
Jak odczytywać logi
CLI: śledzenie na żywo (zalecane)
Użyj CLI do śledzenia pliku logu gateway przez RPC:--local-time: renderuje znaczniki czasu w Twojej lokalnej strefie czasowej--url <url>/--token <token>/--timeout <ms>: standardowe flagi Gateway RPC--expect-final: flaga oczekiwania na końcową odpowiedź dla RPC opartych na agencie (akceptowana tutaj przez współdzieloną warstwę klienta)
- Sesje TTY: estetyczne, kolorowe, ustrukturyzowane wiersze logów.
- Sesje non-TTY: zwykły tekst.
--json: JSON rozdzielany wierszami (jedno zdarzenie logu na wiersz).--plain: wymuś zwykły tekst w sesjach TTY.--no-color: wyłącz kolory ANSI.
--url, CLI nie stosuje automatycznie konfiguracji ani
poświadczeń środowiskowych; dołącz --token samodzielnie, jeśli docelowy Gateway
wymaga uwierzytelniania.
W trybie JSON CLI emituje obiekty oznaczone polem type:
meta: metadane strumienia (plik, kursor, rozmiar)log: sparsowany wpis logunotice: wskazówki dotyczące obcięcia / rotacjiraw: niesparsowany wiersz logu
openclaw logs automatycznie wraca do
skonfigurowanego lokalnego pliku logu. Jawne cele --url nie używają tego fallbacku.
Jeśli Gateway jest nieosiągalny, CLI wypisuje krótką wskazówkę, aby uruchomić:
Control UI (web)
Zakładka Logs w Control UI śledzi ten sam plik za pomocąlogs.tail.
Zobacz /web/control-ui, aby dowiedzieć się, jak ją otworzyć.
Logi tylko kanałów
Aby filtrować aktywność kanałów (WhatsApp/Telegram/itd.), użyj:Formaty logów
Logi plikowe (JSONL)
Każdy wiersz w pliku logu jest obiektem JSON. CLI i Control UI analizują te wpisy, aby renderować ustrukturyzowane dane wyjściowe (czas, poziom, podsystem, komunikat).Dane wyjściowe konsoli
Logi konsoli są świadome TTY i sformatowane pod kątem czytelności:- Prefiksy podsystemów (np.
gateway/channels/whatsapp) - Kolorowanie poziomów (info/warn/error)
- Opcjonalny tryb compact lub JSON
logging.consoleStyle.
Logi WebSocket gateway
openclaw gateway ma także logowanie protokołu WebSocket dla ruchu RPC:
- tryb normalny: tylko interesujące wyniki (błędy, błędy parsowania, wolne wywołania)
--verbose: cały ruch żądań/odpowiedzi--ws-log auto|compact|full: wybór stylu renderowania verbose--compact: alias dla--ws-log compact
Konfigurowanie logowania
Cała konfiguracja logowania znajduje się podlogging w ~/.openclaw/openclaw.json.
Poziomy logów
logging.level: poziom logów plikowych (JSONL).logging.consoleLevel: poziom szczegółowości konsoli.
OPENCLAW_LOG_LEVEL (np. OPENCLAW_LOG_LEVEL=debug). Zmienna środowiskowa ma pierwszeństwo przed plikiem konfiguracyjnym, więc możesz podnieść poziom szczegółowości dla pojedynczego uruchomienia bez edytowania openclaw.json. Możesz też przekazać globalną opcję CLI --log-level <level> (na przykład openclaw --log-level debug gateway run), która nadpisuje zmienną środowiskową dla tego polecenia.
--verbose wpływa tylko na dane wyjściowe konsoli i szczegółowość logów WS; nie zmienia
poziomów logów plikowych.
Style konsoli
logging.consoleStyle:
pretty: przyjazny dla człowieka, kolorowy, ze znacznikami czasu.compact: bardziej zwarty format (najlepszy dla długich sesji).json: JSON w każdym wierszu (dla procesorów logów).
Redagowanie
Podsumowania narzędzi mogą redagować wrażliwe tokeny, zanim trafią do konsoli:logging.redactSensitive:off|tools(domyślnie:tools)logging.redactPatterns: lista ciągów regex nadpisujących zestaw domyślny
Diagnostics + OpenTelemetry
Diagnostics to ustrukturyzowane, czytelne dla maszyn zdarzenia dla uruchomień modeli oraz telemetrii przepływu wiadomości (webhooki, kolejkowanie, stan sesji). Nie zastępują logów; istnieją po to, aby zasilać metryki, trace i inne eksportery. Zdarzenia diagnostics są emitowane w procesie, ale eksportery dołączają się tylko wtedy, gdy włączone są diagnostics i plugin eksportera.OpenTelemetry vs OTLP
- OpenTelemetry (OTel): model danych + SDK dla trace, metryk i logów.
- OTLP: protokół sieciowy używany do eksportu danych OTel do kolektora/backendu.
- OpenClaw eksportuje dziś przez OTLP/HTTP (protobuf).
Eksportowane sygnały
- Metryki: liczniki + histogramy (użycie tokenów, przepływ wiadomości, kolejkowanie).
- Trace: spans dla użycia modeli + przetwarzania webhooków/wiadomości.
- Logi: eksportowane przez OTLP, gdy włączono
diagnostics.otel.logs. Wolumen logów może być wysoki; pamiętaj ologging.leveli filtrach eksportera.
Katalog zdarzeń diagnostycznych
Użycie modeli:model.usage: tokeny, koszt, czas trwania, kontekst, dostawca/model/kanał, identyfikatory sesji.
webhook.received: wejście webhooka per kanał.webhook.processed: obsłużony webhook + czas trwania.webhook.error: błędy handlera webhooka.message.queued: wiadomość dodana do kolejki do przetworzenia.message.processed: wynik + czas trwania + opcjonalny błąd.
queue.lane.enqueue: dodanie do kolejki pasa poleceń + głębokość.queue.lane.dequeue: zdjęcie z kolejki pasa poleceń + czas oczekiwania.session.state: przejście stanu sesji + przyczyna.session.stuck: ostrzeżenie o zablokowanej sesji + wiek.run.attempt: metadane ponowień/prób uruchomienia.diagnostic.heartbeat: agregowane liczniki (webhooki/kolejka/sesja).
Włączanie diagnostics (bez eksportera)
Użyj tego, jeśli chcesz, aby zdarzenia diagnostics były dostępne dla pluginów lub własnych ujść:Flagi diagnostics (ukierunkowane logi)
Używaj flag, aby włączać dodatkowe, ukierunkowane logi debug bez podnoszenialogging.level.
Flagi są nieczułe na wielkość liter i obsługują wildcardy (np. telegram.* lub *).
- Logi flag trafiają do standardowego pliku logu (tego samego co
logging.file). - Dane wyjściowe są nadal redagowane zgodnie z
logging.redactSensitive. - Pełny przewodnik: /diagnostics/flags.
Eksport do OpenTelemetry
Diagnostics można eksportować przez plugindiagnostics-otel (OTLP/HTTP). To
działa z dowolnym kolektorem/backendem OpenTelemetry, który akceptuje OTLP/HTTP.
- Możesz też włączyć plugin poleceniem
openclaw plugins enable diagnostics-otel. protocolobecnie obsługuje tylkohttp/protobuf.grpcjest ignorowane.- Metryki obejmują użycie tokenów, koszt, rozmiar kontekstu, czas trwania uruchomienia i liczniki/histogramy przepływu wiadomości (webhooki, kolejkowanie, stan sesji, głębokość/czas oczekiwania kolejki).
- Trace/metryki można przełączać przez
traces/metrics(domyślnie: włączone). Trace obejmują spans użycia modeli oraz spans przetwarzania webhooków/wiadomości, gdy są włączone. - Ustaw
headers, gdy Twój kolektor wymaga uwierzytelniania. - Obsługiwane zmienne środowiskowe:
OTEL_EXPORTER_OTLP_ENDPOINT,OTEL_SERVICE_NAME,OTEL_EXPORTER_OTLP_PROTOCOL.
Eksportowane metryki (nazwy + typy)
Użycie modeli:openclaw.tokens(licznik, atrybuty:openclaw.token,openclaw.channel,openclaw.provider,openclaw.model)openclaw.cost.usd(licznik, atrybuty:openclaw.channel,openclaw.provider,openclaw.model)openclaw.run.duration_ms(histogram, atrybuty:openclaw.channel,openclaw.provider,openclaw.model)openclaw.context.tokens(histogram, atrybuty:openclaw.context,openclaw.channel,openclaw.provider,openclaw.model)
openclaw.webhook.received(licznik, atrybuty:openclaw.channel,openclaw.webhook)openclaw.webhook.error(licznik, atrybuty:openclaw.channel,openclaw.webhook)openclaw.webhook.duration_ms(histogram, atrybuty:openclaw.channel,openclaw.webhook)openclaw.message.queued(licznik, atrybuty:openclaw.channel,openclaw.source)openclaw.message.processed(licznik, atrybuty:openclaw.channel,openclaw.outcome)openclaw.message.duration_ms(histogram, atrybuty:openclaw.channel,openclaw.outcome)
openclaw.queue.lane.enqueue(licznik, atrybuty:openclaw.lane)openclaw.queue.lane.dequeue(licznik, atrybuty:openclaw.lane)openclaw.queue.depth(histogram, atrybuty:openclaw.lanelubopenclaw.channel=heartbeat)openclaw.queue.wait_ms(histogram, atrybuty:openclaw.lane)openclaw.session.state(licznik, atrybuty:openclaw.state,openclaw.reason)openclaw.session.stuck(licznik, atrybuty:openclaw.state)openclaw.session.stuck_age_ms(histogram, atrybuty:openclaw.state)openclaw.run.attempt(licznik, atrybuty:openclaw.attempt)
Eksportowane spans (nazwy + kluczowe atrybuty)
openclaw.model.usageopenclaw.channel,openclaw.provider,openclaw.modelopenclaw.sessionKey,openclaw.sessionIdopenclaw.tokens.*(input/output/cache_read/cache_write/total)
openclaw.webhook.processedopenclaw.channel,openclaw.webhook,openclaw.chatId
openclaw.webhook.erroropenclaw.channel,openclaw.webhook,openclaw.chatId,openclaw.error
openclaw.message.processedopenclaw.channel,openclaw.outcome,openclaw.chatId,openclaw.messageId,openclaw.sessionKey,openclaw.sessionId,openclaw.reason
openclaw.session.stuckopenclaw.state,openclaw.ageMs,openclaw.queueDepth,openclaw.sessionKey,openclaw.sessionId
Sampling + opróżnianie
- Próbkowanie trace:
diagnostics.otel.sampleRate(0.0–1.0, tylko spans główne). - Interwał eksportu metryk:
diagnostics.otel.flushIntervalMs(minimum 1000ms).
Uwagi dotyczące protokołu
- Endpointy OTLP/HTTP można ustawić przez
diagnostics.otel.endpointlubOTEL_EXPORTER_OTLP_ENDPOINT. - Jeśli endpoint zawiera już
/v1/traceslub/v1/metrics, jest używany bez zmian. - Jeśli endpoint zawiera już
/v1/logs, jest używany bez zmian dla logów. diagnostics.otel.logswłącza eksport logów OTLP dla danych wyjściowych głównego loggera.
Zachowanie eksportu logów
- Logi OTLP używają tych samych ustrukturyzowanych rekordów zapisywanych do
logging.file. - Szanują
logging.level(poziom logów plikowych). Redagowanie konsoli nie ma zastosowania do logów OTLP. - Instalacje o wysokim wolumenie powinny preferować próbkowanie/filtrowanie w kolektorze OTLP.
Wskazówki dotyczące rozwiązywania problemów
- Gateway nieosiągalny? Najpierw uruchom
openclaw doctor. - Puste logi? Sprawdź, czy Gateway działa i zapisuje do ścieżki pliku
z
logging.file. - Potrzebujesz więcej szczegółów? Ustaw
logging.levelnadebuglubtracei spróbuj ponownie.
Powiązane
- Gateway Logging Internals — style logów WS, prefiksy podsystemów i przechwytywanie konsoli
- Diagnostics — eksport OpenTelemetry i konfiguracja cache trace