Gateway

Journalisation

OpenClaw dispose de deux surfaces de journalisation principales :

  • Journaux de fichiers (lignes JSON) écrits par le Gateway.
  • Sortie console affichée dans les terminaux et l’interface utilisateur de débogage du Gateway.

L’onglet Journaux de l’interface de contrôle suit le journal de fichier du gateway. Cette page explique où se trouvent les journaux, comment les lire, et comment configurer les niveaux et formats de journalisation.

Où se trouvent les journaux

Par défaut, le Gateway écrit un fichier journal rotatif sous :

/tmp/openclaw/openclaw-YYYY-MM-DD.log

La date utilise le fuseau horaire local de l’hôte du gateway.

Chaque fichier est remplacé lorsqu’il atteint logging.maxFileBytes (par défaut : 100 Mo). OpenClaw conserve jusqu’à cinq archives numérotées à côté du fichier actif, comme openclaw-YYYY-MM-DD.1.log, et continue d’écrire dans un nouveau journal actif au lieu de supprimer les diagnostics.

Vous pouvez remplacer ce réglage dans ~/.openclaw/openclaw.json :

{
  "logging": {
    "file": "/path/to/openclaw.log"
  }
}

Comment lire les journaux

CLI : suivi en direct (recommandé)

Utilisez la CLI pour suivre le fichier journal du gateway via RPC :

openclaw logs --follow

Options actuelles utiles :

  • --local-time : affiche les horodatages dans votre fuseau horaire local
  • --url <url> / --token <token> / --timeout <ms> : indicateurs RPC standards du Gateway
  • --expect-final : indicateur d’attente de réponse finale RPC adossée à un agent (accepté ici via la couche client partagée)

Modes de sortie :

  • Sessions TTY : lignes de journal structurées, jolies et colorées.
  • Sessions non TTY : texte brut.
  • --json : JSON délimité par lignes (un événement de journal par ligne).
  • --plain : force le texte brut dans les sessions TTY.
  • --no-color : désactive les couleurs ANSI.

Lorsque vous passez un --url explicite, la CLI n’applique pas automatiquement les identifiants de configuration ou d’environnement ; incluez vous-même --token si le Gateway cible exige une authentification.

En mode JSON, la CLI émet des objets balisés par type :

  • meta : métadonnées du flux (fichier, curseur, taille)
  • log : entrée de journal analysée
  • notice : indications de troncature / rotation
  • raw : ligne de journal non analysée

Si le Gateway local loopback implicite demande un appairage, ferme pendant la connexion, ou expire avant que logs.tail ne réponde, openclaw logs bascule automatiquement vers le journal de fichier du Gateway configuré. Les cibles --url explicites n’utilisent pas ce mécanisme de repli.

Si le Gateway est injoignable, la CLI affiche une courte indication invitant à exécuter :

openclaw doctor

Interface de contrôle (web)

L’onglet Journaux de l’interface de contrôle suit le même fichier avec logs.tail. Consultez Interface de contrôle pour savoir comment l’ouvrir.

Journaux propres aux canaux

Pour filtrer l’activité des canaux (WhatsApp/Telegram/etc), utilisez :

openclaw channels logs --channel whatsapp

Formats de journal

Journaux de fichiers (JSONL)

Chaque ligne du fichier journal est un objet JSON. La CLI et l’interface de contrôle analysent ces entrées pour afficher une sortie structurée (heure, niveau, sous-système, message).

Les enregistrements JSONL des journaux de fichiers incluent aussi des champs de premier niveau filtrables par machine lorsqu’ils sont disponibles :

  • hostname : nom d’hôte du gateway.
  • message : texte du message de journal aplati pour la recherche en texte intégral.
  • agent_id : identifiant de l’agent actif lorsque l’appel de journal transporte un contexte d’agent.
  • session_id : identifiant/clé de session actif lorsque l’appel de journal transporte un contexte de session.
  • channel : canal actif lorsque l’appel de journal transporte un contexte de canal.

OpenClaw conserve les arguments de journal structurés d’origine aux côtés de ces champs afin que les analyseurs existants qui lisent les clés d’argument tslog numérotées continuent de fonctionner.

L’activité de conversation, de voix en temps réel et de salle gérée émet des enregistrements de journal de cycle de vie bornés via ce même pipeline de journalisation de fichiers. Ces enregistrements incluent le type d’événement, le mode, le transport, le fournisseur et les mesures de taille/temps lorsqu’ils sont disponibles, mais omettent le texte de transcription, les charges utiles audio, les identifiants de tour, les identifiants d’appel et les identifiants d’élément fournisseur.

Sortie console

Les journaux console sont compatibles TTY et formatés pour la lisibilité :

  • Préfixes de sous-système (par ex. gateway/channels/whatsapp)
  • Coloration des niveaux (info/warn/error)
  • Mode compact ou JSON optionnel

Le formatage console est contrôlé par logging.consoleStyle.

Journaux WebSocket du Gateway

openclaw gateway dispose aussi d’une journalisation du protocole WebSocket pour le trafic RPC :

  • mode normal : seuls les résultats intéressants (erreurs, erreurs d’analyse, appels lents)
  • --verbose : tout le trafic requête/réponse
  • --ws-log auto|compact|full : choisit le style de rendu détaillé
  • --compact : alias de --ws-log compact

Exemples :

openclaw gateway
openclaw gateway --verbose --ws-log compact
openclaw gateway --verbose --ws-log full

Configurer la journalisation

Toute la configuration de journalisation se trouve sous logging dans ~/.openclaw/openclaw.json.

{
  "logging": {
    "level": "info",
    "file": "/tmp/openclaw/openclaw-YYYY-MM-DD.log",
    "consoleLevel": "info",
    "consoleStyle": "pretty",
    "redactSensitive": "tools",
    "redactPatterns": ["sk-.*"]
  }
}

Niveaux de journalisation

  • logging.level : niveau des journaux de fichiers (JSONL).
  • logging.consoleLevel : niveau de verbosité de la console.

Vous pouvez remplacer les deux via la variable d’environnement OPENCLAW_LOG_LEVEL (par ex. OPENCLAW_LOG_LEVEL=debug). La variable d’environnement a priorité sur le fichier de configuration, ce qui permet d’augmenter la verbosité pour une seule exécution sans modifier openclaw.json. Vous pouvez aussi passer l’option CLI globale --log-level <level> (par exemple, openclaw --log-level debug gateway run), qui remplace la variable d’environnement pour cette commande.

--verbose n’affecte que la sortie console et la verbosité du journal WS ; il ne modifie pas les niveaux des journaux de fichiers.

Corrélation de trace

Les journaux de fichiers sont en JSONL. Lorsqu’un appel de journal transporte un contexte de trace de diagnostic valide, OpenClaw écrit les champs de trace comme clés JSON de premier niveau (traceId, spanId, parentSpanId, traceFlags) afin que les processeurs de journaux externes puissent corréler la ligne avec les spans OTEL et la propagation traceparent du fournisseur.

Les requêtes HTTP du Gateway et les trames WebSocket du Gateway établissent une portée de trace de requête interne. Les journaux et événements de diagnostic émis dans cette portée asynchrone héritent de la trace de requête lorsqu’ils ne passent pas de contexte de trace explicite. Les traces d’exécution d’agent et d’appels de modèle deviennent des enfants de la trace de requête active, ce qui permet de joindre les journaux locaux, les instantanés de diagnostic, les spans OTEL et les en-têtes traceparent de fournisseurs de confiance par traceId sans journaliser le contenu brut de la requête ou du modèle.

Les enregistrements de journal de cycle de vie de conversation sont aussi envoyés vers les journaux OTLP lorsque l’exportation des journaux OpenTelemetry est activée, en utilisant les mêmes attributs bornés que les journaux de fichiers.

Taille et durée des appels de modèle

Les diagnostics d’appels de modèle enregistrent des mesures bornées de requête/réponse sans capturer le contenu brut du prompt ou de la réponse :

  • requestPayloadBytes : taille en octets UTF-8 de la charge utile finale de requête au modèle
  • responseStreamBytes : taille en octets UTF-8 des événements de réponse de modèle diffusés
  • timeToFirstByteMs : temps écoulé avant le premier événement de réponse diffusé
  • durationMs : durée totale de l’appel de modèle

Ces champs sont disponibles pour les instantanés de diagnostic, les hooks Plugin d’appels de modèle et les spans/métriques OTEL d’appels de modèle lorsque l’exportation des diagnostics est activée.

Styles de console

logging.consoleStyle :

  • pretty : convivial pour les humains, coloré, avec horodatages.
  • compact : sortie plus resserrée (idéale pour les longues sessions).
  • json : JSON par ligne (pour les processeurs de journaux).

Masquage

OpenClaw peut masquer les jetons sensibles avant qu’ils n’atteignent la sortie console, les journaux de fichiers, les enregistrements de journal OTLP, le texte de transcription de session persisté ou les charges utiles d’événements d’outils de l’interface de contrôle (arguments de démarrage d’outil, charges utiles de résultat partiel/final, sortie exec dérivée et résumés de patch) :

  • logging.redactSensitive : off | tools (par défaut : tools)
  • logging.redactPatterns : liste de chaînes regex pour remplacer l’ensemble par défaut. Les modèles personnalisés s’appliquent en plus des valeurs par défaut intégrées pour les charges utiles d’outils de l’interface de contrôle ; l’ajout d’un modèle n’affaiblit donc jamais le masquage des valeurs déjà capturées par les valeurs par défaut.

Les journaux de fichiers et les transcriptions de session restent en JSONL, mais les valeurs secrètes correspondantes sont masquées avant que la ligne ou le message ne soit écrit sur disque. Le masquage est fait au mieux : il s’applique au contenu de message textuel et aux chaînes de journal, pas à chaque identifiant ou champ de charge utile binaire.

Les valeurs par défaut intégrées couvrent les identifiants d’API courants et les noms de champs d’identifiants de paiement comme numéro de carte, CVC/CVV, jeton de paiement partagé et identifiant de paiement lorsqu’ils apparaissent comme champs JSON, paramètres d’URL, indicateurs CLI ou affectations.

logging.redactSensitive: "off" désactive uniquement cette politique générale de journaux/transcriptions. OpenClaw masque toujours les charges utiles de limite de sécurité qui peuvent être affichées aux clients d’interface utilisateur, bundles de support, observateurs de diagnostics, invites d’approbation ou outils d’agent. Les exemples incluent les événements d’appels d’outil de l’interface de contrôle, la sortie sessions_history, les exports de support de diagnostic, les observations d’erreur de fournisseur, l’affichage de commande d’approbation exec et les journaux du protocole WebSocket du Gateway. Les logging.redactPatterns personnalisés peuvent toujours ajouter des modèles propres au projet sur ces surfaces.

Diagnostics et OpenTelemetry

Les diagnostics sont des événements structurés et lisibles par machine pour les exécutions de modèle et la télémétrie des flux de messages (webhooks, mise en file, état de session). Ils ne remplacent pas les journaux : ils alimentent les métriques, les traces et les exportateurs. Les événements sont émis dans le processus, que vous les exportiez ou non.

Deux surfaces adjacentes :

  • Export OpenTelemetry — envoie les métriques, traces et journaux via OTLP/HTTP vers tout collecteur ou backend compatible OpenTelemetry (Grafana, Datadog, Honeycomb, New Relic, Tempo, etc.). La configuration complète, le catalogue des signaux, les noms de métriques/spans, les variables d’environnement et le modèle de confidentialité se trouvent sur une page dédiée : Export OpenTelemetry.
  • Indicateurs de diagnostic — indicateurs de journaux de débogage ciblés qui acheminent des journaux supplémentaires vers logging.file sans augmenter logging.level. Les indicateurs sont insensibles à la casse et prennent en charge les caractères génériques (telegram.*, *). Configurez-les sous diagnostics.flags ou via le remplacement d’environnement OPENCLAW_DIAGNOSTICS=.... Guide complet : Indicateurs de diagnostic.

Pour activer les événements de diagnostic pour les plugins ou puits personnalisés sans export OTLP :

{
  diagnostics: { enabled: true },
}

Pour l’export OTLP vers un collecteur, consultez Export OpenTelemetry.

Conseils de dépannage

  • Gateway injoignable ? Exécutez d’abord openclaw doctor.
  • Journaux vides ? Vérifiez que le Gateway est en cours d’exécution et écrit vers le chemin de fichier défini dans logging.file.
  • Besoin de plus de détails ? Définissez logging.level sur debug ou trace et réessayez.

Connexe