Journaux OpenThread

Afficher le code source sur GitHub

Les journaux OpenThread sont contrôlés par de nombreuses constantes de configuration au moment de la compilation. Sauf indication contraire, ces constantes sont définies dans le fichier suivant :

openthread/src/core/config/logging.h

Méthodes de sortie

OpenThread prend en charge différentes méthodes de journalisation des sorties, définies comme constante de configuration au moment de la compilation de OPENTHREAD_CONFIG_LOG_OUTPUT. Les options de méthode de journalisation sont répertoriées dans le fichier suivant:

openthread/src/core/config/logging.h

La configuration par défaut de la sortie du journal est OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED.

La méthode de sortie est un exemple de cas où vous devrez peut-être mettre à jour la constante de configuration au niveau de la plate-forme au lieu de celle de base. Par exemple, pour modifier la méthode de sortie dans l'exemple d'application de simulation, modifiez openthread/examples/platforms/simulation/openthread-core-simulation-config.h au lieu de openthread/src/core/config/logging.h.

Niveaux de journalisation

Les journaux peuvent générer différents niveaux d'informations, définis comme la constante de configuration OPENTHREAD_CONFIG_LOG_LEVEL au moment de la compilation. Les options de niveau sont répertoriées dans le fichier suivant:

openthread/include/openthread/platform/logging.h

La liste des niveaux de journalisation est également disponible dans la documentation de référence de l'API Macros de journalisation de la plate-forme.

Le niveau de journalisation par défaut est OT_LOG_LEVEL_CRIT, qui n'affiche que les journaux les plus critiques. Modifiez le niveau pour afficher plus de journaux si vous le souhaitez. Pour afficher tous les journaux OpenThread, utilisez OT_LOG_LEVEL_DEBG.

Régions de journaux

Les régions de journalisation déterminent les zones du code OpenThread qui sont activées pour la journalisation. L'énumération des régions est définie dans le fichier suivant :

openthread/include/openthread/platform/logging.h

La liste des régions de journaux est également disponible dans la documentation de référence de l'API Énumérations de journalisation de la plate-forme.

Les régions de journalisation sont couramment utilisées comme paramètres dans les fonctions de journalisation. Toutes les régions sont activées par défaut.

Fonction de journalisation par défaut

La fonction par défaut pour la journalisation dans OpenThread est otPlatLog, définie comme la constante de configuration au moment de la compilation de OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION.

Pour en savoir plus sur cette fonction, consultez la documentation de référence de l'API Platform Logging.

Pour utiliser cette fonction directement dans les applications exemple OpenThread, utilisez l'option cmake OT_REFERENCE_DEVICE. Par exemple, pour l'utiliser dans l'application CLI pour l'exemple CC2538 :

./script/build -DOT_REFERENCE_DEVICE=ON

Vous pouvez également mettre à jour le fichier openthread/etc/cmake/options.cmake pour l'activer par défaut lors de la compilation.

Activer les journaux

Avant d'activer les journaux, assurez-vous que votre environnement est configuré pour la compilation d'OpenThread. Voir Créer OpenThread pour plus d'informations.

Activer tous les journaux

Pour activer rapidement tous les niveaux de journalisation et toutes les régions, utilisez l'option cmake OT_FULL_LOGS:

./script/build -DOT_FULL_LOGS=ON

Ce commutateur définit le niveau de journalisation sur OT_LOG_LEVEL_DEBG et active toutes les options de région.

Activer un niveau de journalisation spécifique

Pour activer un niveau de journal spécifique, modifiez openthread/src/core/config/logging.h et mettez à jour OPENTHREAD_CONFIG_LOG_LEVEL au niveau souhaité, puis créez OpenThread. Par exemple, pour activer les journaux jusqu'à OT_LOG_LEVEL_INFO :

#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build

Afficher les journaux dans Syslog

Les journaux sont envoyés à syslog par défaut. Sous Linux, il s'agit de /var/log/syslog..

  1. Créez l'exemple de simulation en activant tous les journaux:
    cd openthread
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  2. Démarrez un nœud simulé :
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  3. Dans une nouvelle fenêtre de terminal, configurez une sortie en temps réel des journaux OT :
    tail -F /var/log/syslog | grep "ot-cli-ftd"
    
  4. Sur le nœud simulé, affichez le thread :
dataset init new
Done
dataset
Active Timestamp: 1
Channel: 13
Channel Mask: 07fff800
Ext PAN ID: d63e8e3e495ebbc3
Mesh Local Prefix: fd3d:b50b:f96d:722d/64
Network Key: dfd34f0f05cad978ec4e32b0413038ff
Network Name: OpenThread-8f28
PAN ID: 0x8f28
PSKc: c23a76e98f1a6483639b1ac1271e2e27
Security Policy: 0, onrcb
Done
dataset commit active
Done
ifconfig up
Done
thread start
Done

Revenez à la fenêtre de terminal exécutant la commande tail. Les journaux doivent s'afficher en temps réel pour le nœud simulé. Notez les tags de journalisation dans la sortie : [INFO], [DEBG] et [NOTE]. Ils correspondent tous aux niveaux de journalisation. Par exemple, si vous définissez le niveau de journalisation sur OT_LOG_LEVEL_INFO, les journaux DEBG disparaissent de la sortie.

ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: SrcAddrMatch - Cleared all entries
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: Read NetworkInfo {rloc:0x9c00, extaddr:1a4aaf5e97c852de, role:Leader, mode:0x0f, keyseq:0x0, ...
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: ... pid:0x8581bc9, mlecntr:0x3eb, maccntr:0x3e8, mliid:05e4b515e33746c8}
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Notifier: StateChanged (0x7f133b) [Ip6+ Ip6- LLAddr MLAddr Rloc+ KeySeqCntr NetData Ip6Mult+ Channel PanId NetName ExtPanId MstrKey PSKc SecPolicy]
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: dataset panid
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: dataset commit active
ot-cli-ftd[30055]: [1] [INFO]-MESH-CP-: Active dataset set
ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: Idle mode: Radio sleeping
ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: RadioPanId: 0x8f28
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Notifier: StateChanged (0x007f0100) [KeySeqCntr Channel PanId NetName ExtPanId MstrKey PSKc SecPolicy]
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: ifconfig up
ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: Idle mode: Radio receiving on channel 11
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: thread start
ot-cli-ftd[30055]: [1] [NOTE]-MLE-----: Role Disabled -> Detached
ot-cli-ftd[30055]: [1] [INFO]-MLE-----: Attempt to become router
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: Read NetworkInfo {rloc:0x9c00, extaddr:1a4aaf5e97c852de, role:Leader, mode:0x0f, keyseq:0x0, ...
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: ... pid:0x8581bc9, mlecntr:0x3eb, maccntr:0x3e8, mliid:05e4b515e33746c8}
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: Saved NetworkInfo {rloc:0x9c00, extaddr:1a4aaf5e97c852de, role:Leader, mode:0x0f, keyseq:0x0, ...
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: ... pid:0x8581bc9, mlecntr:0x7d4, maccntr:0x7d0, mliid:05e4b515e33746c8}
ot-cli-ftd[30055]: [1] [DEBG]-MLE-----: Store Network Information
ot-cli-ftd[30055]: [1] [INFO]-MLE-----: Send Link Request (ff02:0:0:0:0:0:0:2)

Afficher les journaux dans l'application CLI

Les journaux peuvent être consultés directement dans l'application exemple de la CLI OpenThread.

  1. Modifiez le fichier de configuration de l'exemple de plate-forme et modifiez la sortie du journal dans l'application. Pour l'exemple de simulation, il s'agit de openthread/examples/platforms/simulation/openthread-core-simulation-config.h :
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. Créez l'exemple de simulation avec le niveau de journalisation souhaité. Pour activer tous les journaux :
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  3. Démarrez un nœud simulé :
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. La sortie du journal doit s'afficher dans la même fenêtre que la CLI OpenThread à mesure que les commandes sont traitées.

Si vous avez ajouté une journalisation personnalisée et activé tous les journaux, le tampon de ligne de la CLI ou le tampon de transmission UART risque de ne pas être assez volumineux pour gérer les journaux personnalisés supplémentaires. Si certains journaux ne s'affichent pas quand ils le devraient, essayez d'augmenter la taille du tampon de ligne de la CLI, défini comme OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH dans /openthread/src/cli/cli_config.h, ou d'augmenter la taille du tampon de transmission UART, défini comme OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE dans le fichier de configuration de la plate-forme, tel que /src/nrf52840/openthread-core-nrf52840-config.h.

Afficher les journaux d'un NCP

Les journaux d'un NCP peuvent être envoyés via wpantund au syslog d'un hôte. Pour un hôte Linux, il s'agit de /var/log/syslog..

Utilisez une valeur OPENTHREAD_CONFIG_LOG_OUTPUT de OPENTHREAD_CONFIG_LOG_OUTPUT_APP pour activer la journalisation NCP. Modifiez-le dans le fichier de configuration de la plate-forme.

Par exemple, pour activer cette fonctionnalité sur un nrf52840 connecté à un hôte Linux:

  1. Modifiez le fichier de configuration de la plate-forme et remplacez la sortie du journal par l'application. Pour le nrf52840, il s'agit de ./src/nrf52840/openthread-core-nrf52840-config.h dans le dépôt ot-nrf528xx :
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. Créez l'exemple nrf52840 avec le niveau de journaux et d'autres options spécifiques au NCP souhaités. Pour créer un outil de jointure avec tous les journaux activés :
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
  3. Flashez le NCP, connectez-le à l'hôte Linux et démarrez wpantund comme indiqué dans le dépôt wpantund.

  4. Une fois le NCP en cours d'exécution, vérifiez syslog sur la machine Linux :

    tail -F /var/log/syslog | grep "wpantund"
    

  5. Vous devriez voir les journaux OpenThread s'afficher en temps réel pour le NCP. Vous pouvez également les voir dans la sortie wpantund.

Modifier le niveau de journalisation au moment de l'exécution

Les niveaux de journalisation peuvent être modifiés au moment de l'exécution si le contrôle dynamique des niveaux de journalisation est activé.

  1. Créez l'application avec l'option -DOT_LOG_LEVEL_DYNAMIC=ON. Par exemple,
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
  2. Modifiez le niveau de journalisation en fonction de votre implémentation :
    1. Pour un système sur une puce (SoC), utilisez l'API Logging dans votre application OpenThread.
    2. Pour un NCP, utilisez wpanctl sur la ligne de commande. Consultez wpan-properties.h dans le dépôt wpantund pour toutes les propriétés exposées à wpanctl et l'API Spinel pour ses définitions de niveau de journalisation.
      wpanctl set OpenThread:LogLevel 5