Log di OpenThread

Visualizza l'origine su GitHub

I log di OpenThread sono controllati da numerose costanti di configurazione in fase di compilazione. Se non diversamente indicato, queste costanti sono definite nel file seguente:

openthread/src/core/config/logging.h

Metodi di output

OpenThread supporta diversi metodi di logging dell'output, definiti come la costante di configurazione in tempo reale di OPENTHREAD_CONFIG_LOG_OUTPUT. Le opzioni del metodo di registrazione sono elencate nel seguente file:

openthread/src/core/config/logging.h

La configurazione predefinita dell'output del log è OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED.

Il metodo di output è un esempio di dove potresti dover aggiornare la costante di configurazione a livello di piattaforma anziché quella principale. Ad esempio, per cambiare il metodo di output nell'app di esempio di simulazione, modifica openthread/examples/platforms/simulation/openthread-core-simulation-config.h invece di openthread/src/core/config/logging.h.

Livelli di log

I log possono restituire vari livelli di informazioni, definiti come la costante di configurazione in fase di compilazione di OPENTHREAD_CONFIG_LOG_LEVEL. Le opzioni dei livelli sono elencate nel seguente file:

openthread/include/openthread/platform/logging.h

L'elenco dei livelli di log è disponibile anche nel riferimento API della piattaforma di logging di Platform.

Il livello di log predefinito è OT_LOG_LEVEL_CRIT, che genera solo i log più critici. Modifica il livello per vedere più log come preferisci. Per visualizzare tutti i log di OpenThread, utilizza OT_LOG_LEVEL_DEBG.

Registra regioni

Le aree geografiche log determinano quali aree del codice OpenThread sono abilitate per il logging. L'enumerazione della regione è definita nel seguente file:

openthread/include/openthread/platform/logging.h

L'elenco delle regioni di log è disponibile anche nel riferimento API Platform Logging Enumerations.

Le regioni di log vengono comunemente utilizzate come parametri nelle funzioni di log. Tutte le regioni sono abilitate per impostazione predefinita.

Funzione di logging predefinita

La funzione predefinita per il logging in OpenThread è otPlatLog, definita come la costante di configurazione in fase di compilazione di OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION.

Per ulteriori informazioni su questa funzione, consulta la documentazione di riferimento per l'API Platform Logging.

Per usare questa funzione direttamente nelle app di esempio OpenThread, utilizza l'opzione cmake di OT_REFERENCE_DEVICE. Ad esempio, per utilizzarlo all'interno dell'app dell'interfaccia a riga di comando per l'esempio CC2538:

./script/build -DOT_REFERENCE_DEVICE=ON

In alternativa, aggiorna il file openthread/etc/cmake/options.cmake per attivarlo per impostazione predefinita durante la creazione.

Come abilitare i log

Prima di abilitare i log, assicurati che l'ambiente sia configurato per la creazione di OpenThread. Per saperne di più, consulta Creare OpenThread.

Abilita tutti i log

Per abilitare rapidamente tutti i livelli di log e le regioni, utilizza l'opzione cmake di OT_FULL_LOGS:

./script/build -DOT_FULL_LOGS=ON

Questa opzione imposta il livello di log su OT_LOG_LEVEL_DEBG e attiva tutti i flag dell'area geografica.

Abilita un livello specifico di log

Per abilitare un livello specifico di log, modifica openthread/src/core/config/logging.h e aggiorna OPENTHREAD_CONFIG_LOG_LEVEL al livello desiderato, quindi crea OpenThread. Ad esempio, per abilitare i log fino a OT_LOG_LEVEL_INFO:

#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build

Visualizza i log in syslog

I log vengono inviati a syslog per impostazione predefinita. Su Linux, è /var/log/syslog.

  1. Crea l'esempio di simulazione con tutti i log abilitati:
    cd openthread
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  2. Avvia un nodo simulato:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  3. In una nuova finestra del terminale, configura un output in tempo reale dei log OT:
    tail -F /var/log/syslog | grep "ot-cli-ftd"
    
  4. Nel nodo simulato, apri 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

Torna alla finestra del terminale in cui viene eseguito il comando tail. I log dovrebbero essere visualizzati in tempo reale per il nodo simulato. Osserva i tag di log nell'output: [INFO], [DEBG], [NOTE]. Tutte queste opzioni corrispondono ai livelli di log. Ad esempio, se modifichi il livello di log in OT_LOG_LEVEL_INFO, i log DEBG scompaiono dall'output.

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)

Visualizza i log nell'app dell'interfaccia a riga di comando

I log possono essere visualizzati direttamente nell'app di esempio dell'interfaccia a riga di comando di OpenThread.

  1. Modifica il file di configurazione della piattaforma di esempio e cambia l'output del log nell'app. Per l'esempio di simulazione, questo è openthread/examples/platforms/simulation/openthread-core-simulation-config.h:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. Crea l'esempio di simulazione con il livello di log desiderato. Per abilitare tutti i log:
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  3. Avvia un nodo simulato:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. Dovresti vedere l'output del log nella stessa finestra dell'interfaccia a riga di comando di OpenThread mentre i comandi vengono elaborati.

Se hai aggiunto il logging personalizzato e hai abilitato tutti i log, il buffer di riga dell'interfaccia a riga di comando o UART potrebbe non essere abbastanza grande per gestire i log personalizzati aggiuntivi. Se alcuni log non vengono visualizzati quando dovrebbero, prova ad aumentare le dimensioni del buffer di riga dell'interfaccia a riga di comando, definito come OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH in /openthread/src/cli/cli_config.h oppure di aumentare il buffer di trasmissione UART, definito come OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE nel file di configurazione della piattaforma, ad esempio /src/nrf52840/openthread-core-nrf52840-config.h.

Visualizza i log per un NCP

I log per un NCP possono essere inviati tramite wpantund alla syslog di un host. Per un host Linux, è /var/log/syslog.

Utilizza un valore OPENTHREAD_CONFIG_LOG_OUTPUT di OPENTHREAD_CONFIG_LOG_OUTPUT_APP per abilitare il logging NCP. Modificalo nel file di configurazione della piattaforma.

Ad esempio, per abilitare questa funzione per un nrf52840 connesso a un host Linux:

  1. Modifica il file di configurazione della piattaforma e modifica l'output del log nell'app. Per nrf52840, questo è ./src/nrf52840/openthread-core-nrf52840-config.h nel repository ot-nrf528xx:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. Crea l'esempio di nrf52840 con il livello di log desiderato e altri flag specifici di NCP. Per creare un joiner con tutti i log abilitati:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
  3. Fai lampeggiare NCP, collegalo all'host Linux e avvia wpantund come descritto nel repository wpantund.

  4. Quando NCP è in esecuzione, controlla il syslog sulla macchina Linux:

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

  5. I log OpenThread dovrebbero essere visualizzati in tempo reale per NCP. Potresti vederli anche nell'output wpantund.

Modifica il livello di log in fase di esecuzione

I livelli di log possono essere modificati in fase di esecuzione se il controllo del livello di log dinamico è abilitato.

  1. Crea l'app con l'opzione -DOT_LOG_LEVEL_DYNAMIC=ON. Ad esempio,
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
  2. Modifica il livello di log a seconda dell'implementazione:
    1. Per un system-on-chip (SoC), utilizza l'API Logging nella tua applicazione OpenThread.
    2. Per un NCP, utilizza wpanctl dalla riga di comando. Consulta la sezione wpan-properties.h nel repository wpantund per visualizzare tutte le proprietà esposte a wpanctl e l'API Pipistrello per le sue definizioni del livello di log.
      wpanctl set OpenThread:LogLevel 5