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
您也可以在 Platform Logging Macros API 参考文档中找到日志级别列表。
默认日志级别为 OT_LOG_LEVEL_CRIT
,仅输出最重要的日志。您可以根据需要更改级别,以查看更多日志。如需查看所有 OpenThread 日志,请使用 OT_LOG_LEVEL_DEBG
。
日志区域
日志区域决定了 OpenThread 代码的哪些区域启用了日志记录。区域枚举在以下文件中定义:
openthread/include/openthread/platform/logging.h
您也可以在 Platform Logging Enumerations API 参考文档中找到日志区域列表。
日志区域通常用作日志函数中的参数。默认情况下,所有地区均处于启用状态。
默认日志记录函数
OpenThread 中的默认日志记录函数是 otPlatLog
,定义为 OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION
的编译时配置常量。
如需详细了解此函数,请参阅 Platform Logging API 参考文档。
如需直接在 OpenThread 示例应用中使用此函数,请使用 OT_REFERENCE_DEVICE
cmake 选项。例如,如需在 CC2538 示例的 CLI 应用中使用它,请执行以下操作:
./script/build -DOT_REFERENCE_DEVICE=ON
或者,您也可以更新 openthread/etc/cmake/options.cmake
文件,以便在构建时默认启用它。
如何启用日志
在启用日志之前,请确保您的环境已配置为构建 OpenThread。如需了解详情,请参阅构建 OpenThread。
启用所有日志
如需快速启用所有日志级别和区域,请使用 OT_FULL_LOGS
cmake 选项:
./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.
- 构建启用了所有日志的模拟示例:
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"
- 在模拟节点上,调出线程:
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/src/cli/cli_config.h
中定义为 OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH
),或增加 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 日志记录。请在平台的配置文件中更改此设置。
例如,如需为连接到 Linux 主机的 nrf52840 启用此功能,请执行以下操作:
- 修改平台的配置文件,并将日志输出更改为应用。对于 nrf52840,其为 ot-nrf528xx 代码库中的
./src/nrf52840/openthread-core-nrf52840-config.h
:#define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
- 使用所需的日志级别和其他特定于 NXP 的标志构建 nrf52840 示例。如需构建启用了所有日志的联接器,请执行以下操作:
./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
刷写 NCP,将其连接到 Linux 主机,然后启动
wpantund
,如 wpantund 代码库中所详述。NCP 运行后,检查 Linux 机器上的
syslog
:tail -F /var/log/syslog | grep "wpantund"
您应该会看到 NCP 的实时 OpenThread 日志。您可能还会在
wpantund
输出中看到它们。
在运行时更改日志级别
如果启用了动态日志级别控制,则可以在运行时更改日志级别。
- 使用选项
-DOT_LOG_LEVEL_DYNAMIC=ON
构建应用。例如:./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
- 根据您的实现更改日志级别:
- 对于系统级芯片 (SoC),请在 OpenThread 应用中使用 Logging API。
- 对于 NCP,请在命令行中使用
wpanctl
。如需了解公开给wpanctl
的所有属性,请参阅wpantund
代码库中的wpan-properties.h
;如需了解其日志级别定义,请参阅 Spinel API。wpanctl set OpenThread:LogLevel 5