OpenThread ログ

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/src/core/config/logging.h ではなく openthread/examples/platforms/simulation/openthread-core-simulation-config.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

ログリージョンのリストは、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. です。

  1. すべてのログを有効にしてシミュレーション例をビルドします。
    cd openthread
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  2. シミュレートされたノードを起動します。
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  3. 新しいターミナル ウィンドウで、OT ログのリアルタイム出力を設定します。
    tail -F /var/log/syslog | grep "ot-cli-ftd"
    
  4. シミュレートされたノードで、スレッドを表示します。
dataset init new
Done
dataset
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
Done
dataset commit active
Done
ifconfig up
Done
thread 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 サンプルアプリでログを直接表示できます。

  1. サンプル プラットフォームの構成ファイルを編集し、アプリへのログ出力を変更します。シミュレーションの例では、これは openthread/examples/platforms/simulation/openthread-core-simulation-config.h です。
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. 目的のログレベルでシミュレーション サンプルを構築します。すべてのログを有効にするには:
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  3. シミュレートされたノードを起動します。
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. コマンドが処理されると、OpenThread CLI と同じウィンドウにログ出力が表示されます。

カスタム ロギングを追加してすべてのログを有効にしている場合、CLI ラインバッファまたは UART 送信バッファが、追加のカスタムログを処理するのに十分な大きさではない可能性があります。一部のログが想定どおりに表示されない場合は、/openthread/src/cli/cli_config.hOPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH として定義されている CLI ラインバッファのサイズを増やすか、プラットフォームの構成ファイル(/src/nrf52840/openthread-core-nrf52840-config.h など)で OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE として定義されている UART 送信バッファのサイズを大きくしてみてください。

NCP のログを表示する

NCP のログは、wpantund を介してホストの syslog に送信される場合があります。Linux ホストの場合は /var/log/syslog. です。

NCP ロギングを有効にするには、OPENTHREAD_CONFIG_LOG_OUTPUT 値を OPENTHREAD_CONFIG_LOG_OUTPUT_APP に設定します。これは、プラットフォームの構成ファイルで変更します。

たとえば、Linux ホストに接続された nrf52840 でこれを有効にするには、次のコマンドを使用します。

  1. プラットフォームの構成ファイルを編集し、ログ出力をアプリに変更します。nrf52840 の場合、これは ot-nrf528xx リポジトリの ./src/nrf52840/openthread-core-nrf52840-config.h です。
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. 必要なレベルのロギングとその他の NXP 固有のフラグを使用して、nrf52840 の例をビルドします。すべてのログを有効にしてジョイナーを作成するには:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
  3. NCP をフラッシュし、Linux ホストに接続して、wpantund リポジトリで説明されているように wpantund を開始します。

  4. NCP が実行されたら、Linux マシンで syslog を確認します。

    tail -F /var/log/syslog | grep "wpantund"
    

  5. NCP の OpenThread ログがリアルタイムで表示されるはずです。これらは wpantund の出力にも表示されます。

実行時にログレベルを変更する

動的なログレベル制御が有効になっている場合、ログレベルは実行時に変更できます。

  1. オプション -DOT_LOG_LEVEL_DYNAMIC=ON を使用してアプリをビルドします。次に例を示します。
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
  2. 実装に応じてログレベルを変更します。
    1. システム オン チップ(SoC)の場合は、OpenThread アプリケーション内で Logging API を使用します。
    2. NCP の場合は、コマンドラインで wpanctl を使用します。wpanctl に公開されるすべてのプロパティについては、wpantund リポジトリの wpan-properties.h をご覧ください。ログレベルの定義については、Spinel API をご覧ください。
      wpanctl set OpenThread:LogLevel 5