OpenThread 記錄由許多編譯時間設定常數控制。 除非另有說明,否則這些常數會在以下檔案中定義:
openthread/src/core/config/logging.h
輸出方法
OpenThread 支援不同的輸出記錄方法,
OPENTHREAD_CONFIG_LOG_OUTPUT
的編譯時間設定常數。
記錄方法選項列於下列檔案中:
openthread/src/core/config/logging.h
預設記錄輸出設定為
OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED
。
輸出方法就是其中一種範例,您可能需要更新
平台層級的設定常數,而非核心 1。舉例來說
變更模擬範例應用程式中的輸出方法,然後編輯
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 巨集 API 參考資料。
預設的記錄層級為 OT_LOG_LEVEL_CRIT
,只會輸出最多
關鍵記錄檔請變更層級,以便視需要查看更多記錄檔。查看所有項目
OpenThread 記錄,使用 OT_LOG_LEVEL_DEBG
。
記錄檔區域
記錄區域會決定已啟用 OpenThread 程式碼的區域 。區域列舉是由下列檔案定義:
openthread/include/openthread/platform/logging.h
您也可以在平台查看記錄區域清單 Logging 列舉 API 參考資料。
記錄區域通常做為記錄檔函式中的參數使用。所有區域均 預設啟用的功能
預設記錄功能
OpenThread 中的記錄預設函式為 otPlatLog
,定義為
編譯時間設定常數
OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION
。
查看 Platform Logging API 參考資料。
如要直接在 OpenThread 範例應用程式中使用這個函式,請使用 OT_REFERENCE_DEVICE
cmake 選項。例如,如要在 CLI 應用程式中使用 CC2538 範例:
./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"
- 在模擬節點上開啟 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 記錄功能。在以下位置進行變更:
平台設定檔
舉例來說,如要為連線至 Linux 主機的 nrf52840 啟用這項設定,請按照下列步驟操作:
- 編輯平台的設定檔,並將記錄輸出變更為
應用程式對於 nrf52840,此為
ot-nrf528xx 存放區中的
./src/nrf52840/openthread-core-nrf52840-config.h
:#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 開始運作後,請在 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), 並在 Google Analytics 資訊主頁中使用 Logging API OpenThread 應用程式。
- 如果是 NCP,請在指令列中使用
wpanctl
。如要瞭解wpanctl
和 Spinel API 公開的所有屬性,請參閱wpantund
存放區中的wpan-properties.h
,瞭解記錄層級定義。wpanctl set OpenThread:LogLevel 5