Журналы 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 . В 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. В новом окне терминала настройте вывод журналов OT в реальном времени:
    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 .

Просмотр журналов для NCP

Журналы NCP можно отправлять через wpantund в syslog хоста. Для хоста Linux это /var/log/syslog.

Используйте значение OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP , чтобы включить ведение журнала NCP. Измените это в файле конфигурации платформы.

Например, чтобы включить это для nrf52840, подключенного к хосту Linux:

  1. Отредактируйте файл конфигурации платформы и измените вывод журнала в приложение. Для nrf52840 это ./src/nrf52840/openthread-core-nrf52840-config.h в репозитории ot-nrf528xx :
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. Создайте пример nrf52840 с нужным уровнем журналов и другими флагами, специфичными для NCP. Чтобы создать объединитель со всеми включенными журналами:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
  3. Перепрограммируйте NCP, подключите его к хосту Linux и запустите wpantund , как описано в репозитории wpantund .

  4. После запуска NCP проверьте syslog на компьютере с Linux:

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

  5. Вы должны увидеть, как журналы OpenThread отображаются в реальном времени для NCP. Вы также можете увидеть их в выводе wpantund .

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

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

  1. Создайте приложение с опцией -DOT_LOG_LEVEL_DYNAMIC=ON . Например,
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
  2. Измените уровень журнала в зависимости от вашей реализации:
    1. Для системы на кристалле (SoC) используйте API ведения журнала в приложении OpenThread.
    2. Для NCP используйте wpanctl в командной строке. См. wpan-properties.h в репозитории wpantund где представлены все свойства, доступные для wpanctl , а также Spinel API для определения уровня журнала.
      wpanctl set OpenThread:LogLevel 5