Журналы 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 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 или буфер передачи 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) используйте Logging API в своем приложении OpenThread.
    2. Для NCP используйте wpanctl в командной строке. См. wpan-properties.h в репозитории wpantund для всех свойств, предоставляемых wpanctl и API Spinel для его определений на уровне журнала.
      wpanctl set OpenThread:LogLevel 5