OpenThread-Logs werden durch zahlreiche Konfigurationskonstanten zur Kompilierzeit gesteuert. Sofern nicht anders angegeben, werden diese Konstanten in der folgenden Datei definiert:
openthread/src/core/config/logging.h
Ausgabemethoden
OpenThread unterstützt verschiedene Methoden zum Ausgeben von Logs, die als Konfigurationskonstante für die Kompilierzeit von OPENTHREAD_CONFIG_LOG_OUTPUT
definiert sind. Die Optionen für die Protokollierungsmethode 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, wo Sie möglicherweise die Konfigurationskonstante auf Plattformebene anstelle der Kernkonstante aktualisieren müssen. Wenn Sie beispielsweise die Ausgabemethode in der Simulationsbeispiel-App ändern möchten, bearbeiten Sie openthread/examples/platforms/simulation/openthread-core-simulation-config.h
anstelle von openthread/src/core/config/logging.h
.
Protokollebenen
In Logs können unterschiedliche Informationsmengen ausgegeben werden, die als Konfigurationskonstante für die Kompilierzeit von OPENTHREAD_CONFIG_LOG_LEVEL
definiert sind. Die Stufenoptionen sind in der folgenden Datei aufgeführt:
openthread/include/openthread/platform/logging.h
Die Liste der Log-Ebenen finden Sie auch in der API-Referenz für Plattform-Logging-Makros.
Die Standard-Logebene ist OT_LOG_LEVEL_CRIT
. Es werden also nur die wichtigsten Logs ausgegeben. Ändern Sie die Stufe, um nach Bedarf mehr Logs aufzurufen. Wenn Sie alle OpenThread-Logs aufrufen möchten, verwenden Sie OT_LOG_LEVEL_DEBG
.
Protokollregionen
Die Protokollregionen bestimmen, welche Bereiche des OpenThread-Codes für die Protokollierung aktiviert sind. Die Regionsaufzählung ist in der folgenden Datei definiert:
openthread/include/openthread/platform/logging.h
Die Liste der Protokollregionen ist auch in der API-Referenz Platform Logging Enumerations verfügbar.
Log-Bereiche werden häufig als Parameter in Log-Funktionen verwendet. Alle Regionen sind standardmäßig aktiviert.
Standard-Logging-Funktion
Die Standardfunktion für das Logging in OpenThread ist otPlatLog
, die als Kompilierzeit-Konfigurationskonstante von OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION
definiert ist.
Weitere Informationen zu dieser Funktion finden Sie in der API-Referenz zu Platform Logging.
Wenn Sie diese Funktion direkt in den OpenThread-Beispiel-Apps verwenden möchten, verwenden Sie die CMake-Option OT_REFERENCE_DEVICE
. So verwenden Sie es beispielsweise in der CLI-App 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 die Protokolle aktivieren, muss Ihre Umgebung für die Erstellung von OpenThread konfiguriert sein. Weitere Informationen finden Sie unter OpenThread erstellen.
Alle Logs aktivieren
Verwenden Sie die cmake-Option OT_FULL_LOGS
, um schnell alle Protokollebenen und ‑regionen zu aktivieren:
./script/build -DOT_FULL_LOGS=ON
Mit diesem Schalter wird die Protokollebene auf OT_LOG_LEVEL_DEBG
gesetzt und alle Regionsflags werden aktiviert.
Bestimmte Protokollebene aktivieren
Wenn Sie ein bestimmtes Log-Level aktivieren möchten, bearbeiten Sie openthread/src/core/config/logging.h
und aktualisieren Sie OPENTHREAD_CONFIG_LOG_LEVEL
auf das gewünschte Level. 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 im 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
- Simulierten Knoten starten:
./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 Logs sollten für den simulierten Knoten in Echtzeit angezeigt werden. Achten Sie auf die Log-Tags in der Ausgabe: [INFO]
, [DEBG]
, [NOTE]
. Sie entsprechen alle den Logebenen. Wenn Sie beispielsweise die Logebene in OT_LOG_LEVEL_INFO
ändern, werden die DEBG
-Logs nicht mehr in der Ausgabe angezeigt.
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 CLI-App ansehen
Logs können direkt in der OpenThread CLI-Beispiel-App aufgerufen 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 Logs:
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- Simulierten Knoten starten:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- Im selben Fenster wie die OpenThread-Befehlszeile sollten Protokollausgaben angezeigt werden, wenn Befehle verarbeitet werden.
Wenn Sie benutzerdefiniertes Logging hinzugefügt und alle Logs aktiviert haben, ist der CLI-Zeilenpuffer oder der UART-Übertragungspuffer möglicherweise nicht groß genug, um die zusätzlichen benutzerdefinierten Logs zu verarbeiten. Wenn einige Logs nicht angezeigt werden, obwohl sie angezeigt werden sollten, versuchen Sie, die Größe des CLI-Zeilenpuffers zu erhöhen, der als OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH
in /openthread/src/cli/cli_config.h
definiert ist, oder die Größe des UART-Übertragungspuffers zu erhöhen, der als OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE
in der Konfigurationsdatei der Plattform definiert ist, z. B. /src/nrf52840/openthread-core-nrf52840-config.h
.
Protokollebene zur Laufzeit ändern
Logebenen können zur Laufzeit geändert werden, wenn die dynamische Steuerung der Logebene 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
- Verwenden Sie die Logging API in Ihrer OpenThread-Anwendung.