Посмотреть исходный код на 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.
- Создайте пример моделирования со всеми включенными журналами:
cd openthread
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- Запустите моделируемый узел:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- В новом окне терминала настройте вывод журналов OT в реальном времени:
tail -F /var/log/syslog | grep "ot-cli-ftd"
- На моделируемом узле вызовите 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
Вернитесь в окно терминала, выполнив команду 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.
- Отредактируйте файл конфигурации для примера платформы и измените вывод журнала на приложение. Для примера моделирования это
openthread/examples/platforms/simulation/openthread-core-simulation-config.h
:#define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
- Создайте пример моделирования с нужным уровнем журналов. Чтобы включить все журналы:
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- Запустите моделируемый узел:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- Вы должны видеть вывод журнала в том же окне, что и 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:
- Отредактируйте файл конфигурации платформы и измените вывод журнала в приложение. Для nrf52840 это
./src/nrf52840/openthread-core-nrf52840-config.h
в репозитории ot-nrf528xx :#define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
- Создайте пример nrf52840 с нужным уровнем журналов и другими флагами, специфичными для NCP. Чтобы создать объединитель со всеми включенными журналами:
./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
Перепрограммируйте NCP, подключите его к хосту Linux и запустите
wpantund
, как описано в репозитории wpantund .После запуска NCP проверьте
syslog
на компьютере с Linux:tail -F /var/log/syslog | grep "wpantund"
Вы должны увидеть, как журналы OpenThread отображаются в реальном времени для NCP. Вы также можете увидеть их в выводе
wpantund
.
Изменение уровня журнала во время выполнения
Уровни журнала можно изменить во время выполнения, если включено динамическое управление уровнем журнала.
- Создайте приложение с опцией
-DOT_LOG_LEVEL_DYNAMIC=ON
. Например,./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
- Измените уровень журнала в зависимости от вашей реализации:
- Для системы на кристалле (SoC) используйте API ведения журнала в приложении OpenThread.
- Для NCP используйте
wpanctl
в командной строке. См.wpan-properties.h
в репозиторииwpantund
где представлены все свойства, доступные дляwpanctl
, а также Spinel API для определения уровня журнала.wpanctl set OpenThread:LogLevel 5