OpenThread-Logs

Quellcode auf GitHub ansehen

OpenThread-Protokolle werden durch zahlreiche Konfigurationskonstanten zur Laufzeit gesteuert. Sofern nicht anders angegeben, sind diese Konstanten in der folgenden Datei definiert:

openthread/src/core/config/logging.h

Ausgabemethoden

OpenThread unterstützt verschiedene Ausgabe-Logging-Methoden, die als Konfigurationskonstante für die Kompilierungszeit von OPENTHREAD_CONFIG_LOG_OUTPUT definiert sind. Die Optionen für die Logging-Methode sind in der folgenden Datei aufgeführt:

openthread/src/core/config/logging.h

Die Standardkonfiguration für die Protokollausgabe ist OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED.

Die Ausgabemethode ist ein Beispiel dafür, dass Sie möglicherweise die Konfigurationskonstante auf Plattformebene anstelle der Kernkonstante aktualisieren müssen. Wenn Sie beispielsweise die Ausgabemethode in der Beispiel-Simulations-App ändern möchten, bearbeiten Sie openthread/examples/platforms/simulation/openthread-core-simulation-config.h anstelle von openthread/src/core/config/logging.h.

Protokollebenen

Logs können unterschiedliche Informationsebenen ausgeben, definiert als die Konfigurationskonstante für die Kompilierungszeit von OPENTHREAD_CONFIG_LOG_LEVEL. Die Ebenenoptionen sind in der folgenden Datei aufgeführt:

openthread/include/openthread/platform/logging.h

Die Liste der Logebenen finden Sie auch in der API-Referenz für Platform Logging-Makros.

Die Standardprotokollebene ist OT_LOG_LEVEL_CRIT. Dabei werden nur die wichtigsten Protokolle ausgegeben. Ändern Sie die Ebene, um bei Bedarf weitere Logs anzuzeigen. Verwenden Sie OT_LOG_LEVEL_DEBG, um alle OpenThread-Logs aufzurufen.

Logregionen

Anhand der Protokollregionen wird festgelegt, welche Bereiche des OpenThread-Codes für das Logging aktiviert sind. Die Regionsaufzählung ist in der folgenden Datei definiert:

openthread/include/openthread/platform/logging.h

Die Liste der Protokollregionen finden Sie auch in der API-Referenz Platform Logging Enumerations.

Protokollbereiche werden häufig als Parameter in Logfunktionen verwendet. Alle Regionen sind standardmäßig aktiviert.

Standard-Logging-Funktion

Die Standardfunktion für das Logging in OpenThread ist otPlatLog, definiert als die Konfigurationskonstante OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION zur Kompilierzeit.

Weitere Informationen zu dieser Funktion finden Sie in der API-Referenz für Platform Logging.

Wenn Sie diese Funktion direkt in den OpenThread-Beispiel-Apps verwenden möchten, verwenden Sie die OT_REFERENCE_DEVICE-CMake-Option. So verwenden Sie sie beispielsweise in der CLI-Anwendung für das CC2538-Beispiel:

./script/build -DOT_REFERENCE_DEVICE=ON

Alternativ können Sie die Datei openthread/etc/cmake/options.cmake aktualisieren, um sie beim Erstellen standardmäßig zu aktivieren.

Protokolle aktivieren

Bevor Sie Protokolle aktivieren, prüfen Sie, ob Ihre Umgebung für das Erstellen von OpenThread konfiguriert ist. Weitere Informationen finden Sie unter OpenThread erstellen.

Alle Protokolle aktivieren

Wenn Sie alle Logebenen und Regionen schnell aktivieren möchten, verwenden Sie die OT_FULL_LOGS-CMake-Option:

./script/build -DOT_FULL_LOGS=ON

Mit dieser Option wird die Protokollebene auf OT_LOG_LEVEL_DEBG gesetzt und alle Regionsflags aktiviert.

Eine bestimmte Ebene von Logs aktivieren

Um eine bestimmte Logebene zu aktivieren, bearbeiten Sie openthread/src/core/config/logging.h, aktualisieren Sie OPENTHREAD_CONFIG_LOG_LEVEL auf die gewünschte Ebene und erstellen Sie dann OpenThread. So aktivieren Sie beispielsweise Logs bis zu OT_LOG_LEVEL_INFO:

#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build

Logs in Syslog ansehen

Logs werden standardmäßig an syslog gesendet. Unter Linux ist das /var/log/syslog..

  1. Erstellen Sie das Simulationsbeispiel mit allen aktivierten Logs:
    cd openthread
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  2. So starten Sie einen simulierten Knoten:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  3. Richten Sie in einem neuen Terminalfenster eine Echtzeitausgabe der OT-Logs ein:
    tail -F /var/log/syslog | grep "ot-cli-ftd"
    
  4. Rufen Sie auf dem simulierten Knoten Thread auf:
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

Wechseln Sie zurück zum Terminalfenster, in dem der Befehl tail ausgeführt wird. Die Protokolle sollten für den simulierten Knoten in Echtzeit angezeigt werden. Notieren Sie sich die Log-Tags in der Ausgabe: [INFO], [DEBG], [NOTE]. Diese entsprechen den Protokollebenen. Wenn Sie beispielsweise die Logebene in OT_LOG_LEVEL_INFO ändern, werden die DEBG-Protokolle aus der Ausgabe entfernt.

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)

Logs in der Befehlszeilenanwendung ansehen

Logs können direkt in der Beispielanwendung der OpenThread-CLI angezeigt werden.

  1. Bearbeiten Sie die Konfigurationsdatei für die Beispielplattform und ändern Sie die Protokollausgabe in die App. Im Simulationsbeispiel ist das openthread/examples/platforms/simulation/openthread-core-simulation-config.h:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. Erstellen Sie das Simulationsbeispiel mit der gewünschten Protokollebene. So aktivieren Sie alle Protokolle:
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  3. So starten Sie einen simulierten Knoten:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. Die Protokollausgabe sollte im selben Fenster wie die OpenThread-Befehlszeile angezeigt werden, während die Befehle verarbeitet werden.

Wenn Sie benutzerdefinierte Protokolle hinzugefügt und alle Protokolle aktiviert haben, ist der CLI-Zeichenbuffer oder der UART-Übertragungsbuffer möglicherweise nicht groß genug, um die zusätzlichen benutzerdefinierten Protokolle zu verarbeiten. Wenn einige Protokolle nicht angezeigt werden, wie sie sollten, erhöhen Sie die Größe des CLI-Zeichenpuffers, der in /openthread/src/cli/cli_config.h als OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH definiert ist, oder die Größe des UART-Übertragungspuffers, der in der Konfigurationsdatei der Plattform, z. B. /src/nrf52840/openthread-core-nrf52840-config.h, als OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE definiert ist.

Logs für einen NCP ansehen

Logs für einen NCP können über wpantund an die syslog eines Hosts gesendet werden. Bei einem Linux-Host ist das /var/log/syslog..

Verwenden Sie den Wert OPENTHREAD_CONFIG_LOG_OUTPUT_APP für OPENTHREAD_CONFIG_LOG_OUTPUT, um das NCP-Logging zu aktivieren. Ändern Sie dies in der Konfigurationsdatei der Plattform.

So aktivieren Sie diese Funktion beispielsweise für einen nrf52840, der mit einem Linux-Host verbunden ist:

  1. Bearbeiten Sie die Konfigurationsdatei für die Plattform und ändern Sie die Logausgabe in die Anwendung. Für nrf52840 lautet dies ./src/nrf52840/openthread-core-nrf52840-config.h im Repository ot-nrf528xx:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. Erstellen Sie das Beispiel „nrf52840“ mit der gewünschten Protokollebene und anderen NCP-spezifischen Flags. So erstellen Sie einen Zusammenführen mit allen aktivierten Protokollen:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
  3. Flashen Sie den NCP, verbinden Sie ihn mit dem Linux-Host und starten Sie wpantund wie im wpantund-Repository beschrieben.

  4. Wenn der NCP ausgeführt wird, prüfen Sie die syslog auf dem Linux-Computer:

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

  5. Für den NCP sollten OpenThread-Protokolle in Echtzeit angezeigt werden. Sie können auch in der Ausgabe von wpantund angezeigt werden.

Logebene zur Laufzeit ändern

Die Loben können während der Laufzeit geändert werden, wenn die dynamische Steuerung der Lobenebene aktiviert ist.

  1. Erstellen Sie die App mit der Option -DOT_LOG_LEVEL_DYNAMIC=ON. Beispiel:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
  2. Ändern Sie die Logebene entsprechend Ihrer Implementierung:
    1. Verwenden Sie für ein System-on-Chip (SoC) die Logging API in der OpenThread-Anwendung.
    2. Verwenden Sie für einen NCP wpanctl in der Befehlszeile. Unter wpan-properties.h im wpantund-Repository finden Sie alle Properties, die wpanctl bereitgestellt werden. Die Definitionen der Logebenen finden Sie in der Spinel API.
      wpanctl set OpenThread:LogLevel 5