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.
.
- Erstellen Sie das Simulationsbeispiel mit allen aktivierten Logs:
cd openthread
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- So starten Sie einen simulierten Knoten:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- Richten Sie in einem neuen Terminalfenster eine Echtzeitausgabe der OT-Logs ein:
tail -F /var/log/syslog | grep "ot-cli-ftd"
- Rufen Sie auf dem simulierten Knoten Thread auf:
dataset init new
Donedataset
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 Donedataset commit active
Doneifconfig up
Donethread 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.
- 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
- Erstellen Sie das Simulationsbeispiel mit der gewünschten Protokollebene. So aktivieren Sie alle Protokolle:
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- So starten Sie einen simulierten Knoten:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- 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:
- 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
- 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
Flashen Sie den NCP, verbinden Sie ihn mit dem Linux-Host und starten Sie
wpantund
wie im wpantund-Repository beschrieben.Wenn der NCP ausgeführt wird, prüfen Sie die
syslog
auf dem Linux-Computer:tail -F /var/log/syslog | grep "wpantund"
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.
- 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
- Ändern Sie die Logebene entsprechend Ihrer Implementierung:
- Verwenden Sie für ein System-on-Chip (SoC) die Logging API in der OpenThread-Anwendung.
- Verwenden Sie für einen NCP
wpanctl
in der Befehlszeile. Unterwpan-properties.h
imwpantund
-Repository finden Sie alle Properties, diewpanctl
bereitgestellt werden. Die Definitionen der Logebenen finden Sie in der Spinel API.wpanctl set OpenThread:LogLevel 5