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