Los registros de OpenThread se controlan con numerosas constantes de configuración de tiempo de compilación. A menos que se indique lo contrario, estas constantes se definen en el siguiente archivo:
openthread/src/core/config/logging.h
Métodos de salida
OpenThread admite diferentes métodos de registro de salida, definidos como la constante de configuración en tiempo de compilación de OPENTHREAD_CONFIG_LOG_OUTPUT
. Las opciones del método de registro se enumeran en el siguiente archivo:
openthread/src/core/config/logging.h
La configuración predeterminada del registro de salida es OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED
.
El método de salida es un ejemplo de dónde es posible que debas actualizar la constante de configuración a nivel de la plataforma en lugar de la principal. Por ejemplo, para cambiar el método de salida en la app de ejemplo de simulación, edita openthread/examples/platforms/simulation/openthread-core-simulation-config.h
en lugar de openthread/src/core/config/logging.h
.
Niveles de registro
Los registros pueden generar diferentes niveles de información, definidos como la constante de configuración en tiempo de compilación de OPENTHREAD_CONFIG_LOG_LEVEL
. Las opciones de nivel se enumeran en el siguiente archivo:
openthread/include/openthread/platform/logging.h
La lista de niveles de registro también está disponible en la referencia de la API de Macros de registro de la plataforma.
El nivel de registro predeterminado es OT_LOG_LEVEL_CRIT
, que solo genera los registros más críticos. Cambia el nivel para ver más registros según desees. Para ver todos los registros de OpenThread, usa OT_LOG_LEVEL_DEBG
.
Regiones de registro
Las regiones de registro determinan qué áreas del código de OpenThread están habilitadas para el registro. La enumeración de regiones se define en el siguiente archivo:
openthread/include/openthread/platform/logging.h
La lista de regiones de registro también está disponible en la referencia de la API de Enumeraciones de registro de la plataforma.
Las regiones de registro se suelen usar como parámetros en las funciones de registro. Todas las regiones están habilitadas de forma predeterminada.
Función de registro predeterminada
La función predeterminada para el registro dentro de OpenThread es otPlatLog
, que se define como la constante de configuración en tiempo de compilación de OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION
.
Consulta la referencia de la API de Platform Logging para obtener más información sobre esta función.
Para usar esta función directamente en las apps de ejemplo de OpenThread, usa la opción de cmake OT_REFERENCE_DEVICE
. Por ejemplo, para usarlo en la app de la CLI para el ejemplo de CC2538, haz lo siguiente:
./script/build -DOT_REFERENCE_DEVICE=ON
Como alternativa, actualiza el archivo openthread/etc/cmake/options.cmake
para habilitarlo de forma predeterminada durante la compilación.
Cómo habilitar los registros
Antes de habilitar los registros, asegúrate de que tu entorno esté configurado para compilar OpenThread. Consulta Cómo compilar OpenThread para obtener más información.
Habilita todos los registros
Para habilitar rápidamente todos los niveles de registro y las regiones, usa la opción OT_FULL_LOGS
de CMake:
./script/build -DOT_FULL_LOGS=ON
Este interruptor establece el nivel de registro en OT_LOG_LEVEL_DEBG
y activa todas las marcas de región.
Cómo habilitar un nivel específico de registros
Para habilitar un nivel específico de registros, edita openthread/src/core/config/logging.h
y actualiza OPENTHREAD_CONFIG_LOG_LEVEL
al nivel deseado. Luego, compila OpenThread. Por ejemplo, para habilitar los registros hasta OT_LOG_LEVEL_INFO
, haz lo siguiente:
#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build
Cómo ver registros en syslog
De forma predeterminada, los registros se envían a syslog
. En Linux, es /var/log/syslog.
.
- Compila el ejemplo de simulación con todos los registros habilitados:
cd openthread
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- Inicia un nodo simulado:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- En una nueva ventana de terminal, configura una salida en tiempo real de los registros de OT:
tail -F /var/log/syslog | grep "ot-cli-ftd"
- En el nodo simulado, abre Thread:
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
Vuelve a la ventana de la terminal en la que se ejecuta el comando tail
. Los registros deberían mostrarse en tiempo real para el nodo simulado. Observa las etiquetas de registro en el resultado: [INFO]
, [DEBG]
, [NOTE]
. Todos corresponden a los niveles de registro. Por ejemplo, si cambias el nivel de registro a OT_LOG_LEVEL_INFO
, los registros DEBG
desaparecerán del resultado.
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)
Visualiza registros en la app de la CLI
Los registros se pueden ver directamente en la app de ejemplo de la CLI de OpenThread.
- Edita el archivo de configuración de la plataforma de ejemplo y cambia el resultado del registro a la app. Para el ejemplo de simulación, es
openthread/examples/platforms/simulation/openthread-core-simulation-config.h
:#define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
- Compila el ejemplo de simulación con el nivel de registros deseado. Para habilitar todos los registros, haz lo siguiente:
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- Inicia un nodo simulado:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- Deberías ver el registro de salida en la misma ventana que la CLI de OpenThread a medida que se procesan los comandos.
Si agregaste registros personalizados y habilitaste todos los registros, es posible que el búfer de líneas de la CLI o el búfer de transmisión UART no sean lo suficientemente grandes como para controlar los registros personalizados adicionales. Si algunos registros no aparecen cuando deberían, intenta aumentar el tamaño del búfer de líneas de la CLI, definido como OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH
en /openthread/src/cli/cli_config.h
, o aumentar el tamaño del búfer de transmisión UART, definido como OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE
en el archivo de configuración de la plataforma, como /src/nrf52840/openthread-core-nrf52840-config.h
.
Cómo cambiar el nivel de registro en el tiempo de ejecución
Los niveles de registro se pueden cambiar durante el tiempo de ejecución si está habilitado el control dinámico del nivel de registro.
- Compila la app con la opción
-DOT_LOG_LEVEL_DYNAMIC=ON
. Por ejemplo:./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
- Usa la API de Logging en tu aplicación de OpenThread.