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/src/core/config/logging.h
ではなく openthread/examples/platforms/simulation/openthread-core-simulation-config.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"
- シミュレートされたノードで 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 送信バッファが、追加されたカスタムログを処理するのに十分な大きさにならない場合があります。一部のログが想定どおりに表示されない場合は、/openthread/src/cli/cli_config.h
で OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH
として定義された CLI 行バッファのサイズを大きくするか、プラットフォームの構成ファイルで OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE
として定義されている UART 送信バッファのサイズ(/src/nrf52840/openthread-core-nrf52840-config.h
など)を大きくしてみてください。
NCP のログを表示する
NCP のログは、wpantund
を介してホストの syslog
に送信される場合があります。Linux ホストの場合、これは /var/log/syslog.
です。
NCP ロギングを有効にするには、OPENTHREAD_CONFIG_LOG_OUTPUT
の値 OPENTHREAD_CONFIG_LOG_OUTPUT_APP
を使用します。これは、プラットフォームの構成ファイルで変更します。
たとえば、Linux ホストに接続されている nrf52840 に対して有効にするには、次のようにします。
- プラットフォームの構成ファイルを編集し、ログ出力をアプリに変更します。nrf52840 の場合、これは ot-nrf528xx リポジトリの
./src/nrf52840/openthread-core-nrf52840-config.h
です。#define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
- 目的のレベルのログとその他の NCP 固有のフラグを指定して nrf52840 の例をビルドします。すべてのログを有効にしてジョイナーをビルドするには:
./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
NCP をフラッシュして Linux ホストに接続し、wpantund リポジトリに詳述されているように
wpantund
を起動します。NCP の実行が開始されたら、Linux マシン(
)でtail -F /var/log/syslog | grep "wpantund"
syslog
を確認します。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