Журналы OpenThread

Просмотреть исходный код на GitHub

Журналы OpenThread контролируются многочисленными константами конфигурации времени компиляции. Если не указано иное, эти константы определены в следующем файле:

openthread/src/core/config/logging.h

Методы вывода

OpenThread поддерживает различные методы журналирования выходных данных, определяемые константой конфигурации времени компиляции OPENTHREAD_CONFIG_LOG_OUTPUT . Параметры методов журналирования перечислены в следующем файле:

openthread/src/core/config/logging.h

Конфигурация вывода журнала по умолчанию — OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED .

Метод вывода — пример ситуации, когда может потребоваться обновить константу конфигурации уровня платформы, а не ядра. Например, чтобы изменить метод вывода в примере приложения-симуляции, отредактируйте файл openthread/examples/platforms/simulation/openthread-core-simulation-config.h вместо openthread/src/core/config/logging.h .

Уровни журнала

Журналы могут выводить информацию разного уровня, определяемую константой конфигурации времени компиляции OPENTHREAD_CONFIG_LOG_LEVEL . Параметры уровня перечислены в следующем файле:

openthread/include/openthread/platform/logging.h

Список уровней ведения журнала также доступен в справочнике API макросов ведения журнала платформы .

Уровень журнала по умолчанию — OT_LOG_LEVEL_CRIT , который выводит только самые важные журналы. Измените уровень, чтобы увидеть больше журналов. Чтобы увидеть все журналы OpenThread, используйте OT_LOG_LEVEL_DEBG .

Логарифмические регионы

Области журнала определяют, какие области кода OpenThread включены для журналирования. Перечисление областей определено в следующем файле:

openthread/include/openthread/platform/logging.h

Список областей журнала также доступен в справочнике API перечислений журналов платформы .

Области логарифмирования обычно используются в качестве параметров в функциях логарифмирования. Все области логарифмирования включены по умолчанию.

Функция ведения журнала по умолчанию

Функция по умолчанию для ведения журнала в OpenThread — otPlatLog , определяемая как константа конфигурации времени компиляции OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION .

Дополнительную информацию об этой функции см. в справочнике по API ведения журнала платформы .

Чтобы использовать эту функцию непосредственно в приложениях-примерах OpenThread, используйте параметр cmake OT_REFERENCE_DEVICE . Например, чтобы использовать её в приложении CLI для примера CC2538:

./script/build -DOT_REFERENCE_DEVICE=ON

Либо обновите файл openthread/etc/cmake/options.cmake чтобы включить его по умолчанию при сборке.

Как включить журналы

Перед включением журналов убедитесь, что ваша среда настроена для сборки OpenThread. Подробнее см. в разделе «Сборка OpenThread» .

Включить все журналы

Чтобы быстро включить все уровни и регионы журнала, используйте параметр cmake OT_FULL_LOGS :

./script/build -DOT_FULL_LOGS=ON

Этот переключатель устанавливает уровень журнала на OT_LOG_LEVEL_DEBG и включает все флаги региона.

Включить определенный уровень журналов

Чтобы включить определённый уровень журналирования, отредактируйте openthread/src/core/config/logging.h и обновите OPENTHREAD_CONFIG_LOG_LEVEL до нужного уровня, а затем соберите OpenThread. Например, чтобы включить журналирование до OT_LOG_LEVEL_INFO :

#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build

Просмотр журналов в syslog

По умолчанию логи отправляются в syslog . В Linux это /var/log/syslog.

  1. Создайте пример симуляции со всеми включенными журналами:
    cd openthread
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  2. Запустите моделируемый узел:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  3. В новом окне терминала настройте вывод журналов ОТ в реальном времени:
    tail -F /var/log/syslog | grep "ot-cli-ftd"
    
  4. На моделируемом узле вызовите 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

Вернитесь в окно терминала, выполнив команду tail . Журналы для симулируемого узла должны отображаться в режиме реального времени. Обратите внимание на теги журнала в выходных данных: [INFO] , [DEBG] , [NOTE] . Все они соответствуют уровням журнала . Например, если изменить уровень журнала на OT_LOG_LEVEL_INFO , журналы DEBG исчезнут из выходных данных.

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)

Просмотр журналов в приложении CLI

Журналы можно просматривать непосредственно в примере приложения OpenThread CLI.

  1. Отредактируйте файл конфигурации для платформы-примера и измените вывод журнала в приложение. Для примера симуляции это openthread/examples/platforms/simulation/openthread-core-simulation-config.h :
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. Создайте пример симуляции с желаемым уровнем журналов. Чтобы включить все журналы:
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  3. Запустите моделируемый узел:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. По мере обработки команд вы должны увидеть вывод журнала в том же окне, что и OpenThread CLI.

Если вы добавили пользовательское ведение журнала и включили все журналы, буфера линии CLI или буфера передачи UART может быть недостаточно для обработки дополнительных пользовательских журналов. Если некоторые журналы не появляются в нужное время, попробуйте увеличить размер буфера линии CLI, заданный как OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH в /openthread/src/cli/cli_config.h , или размер буфера передачи UART, заданный как OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE в файле конфигурации платформы, например, /src/nrf52840/openthread-core-nrf52840-config.h .

Изменить уровень журнала во время выполнения

Уровни журналирования могут быть изменены во время выполнения, если включено динамическое управление уровнями журналирования.

  1. Создайте приложение с опцией -DOT_LOG_LEVEL_DYNAMIC=ON . Например,
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
  2. Используйте API ведения журнала в вашем приложении OpenThread.