Log OpenThread

Lihat sumber di GitHub

Log OpenThread dikontrol oleh berbagai konstanta konfigurasi waktu kompilasi. Kecuali dinyatakan lain, konstanta ini ditentukan dalam file berikut:

openthread/src/core/config/logging.h

Metode output

OpenThread mendukung berbagai metode logging output, yang didefinisikan sebagai konstanta konfigurasi waktu kompilasi OPENTHREAD_CONFIG_LOG_OUTPUT. Tujuan opsi metode logging tercantum dalam file berikut:

openthread/src/core/config/logging.h

Konfigurasi {i>output<i} log {i>default<i} adalah OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED.

Metode output adalah contoh saat Anda mungkin perlu mengupdate konfigurasi level platform, bukan yang inti. Misalnya, untuk ubah metode output di aplikasi contoh simulasi, edit openthread/examples/platforms/simulation/openthread-core-simulation-config.h, bukan openthread/src/core/config/logging.h.

Level log

Log dapat menghasilkan berbagai tingkat informasi, yang didefinisikan sebagai waktu kompilasi konstanta konfigurasi OPENTHREAD_CONFIG_LOG_LEVEL. Opsi levelnya adalah yang tercantum dalam file berikut:

openthread/include/openthread/platform/logging.h

Daftar level log juga tersedia di Platform Referensi API Makro Logging.

Level log default adalah OT_LOG_LEVEL_CRIT yang hanya menghasilkan output terbanyak log kritis. Ubah level untuk melihat lebih banyak log sesuai keinginan. Untuk melihat semua Log OpenThread, gunakan OT_LOG_LEVEL_DEBG.

Log region

Region log menentukan area kode OpenThread yang diaktifkan pembuatan log. Enumerasi region ditentukan dalam file berikut:

openthread/include/openthread/platform/logging.h

Daftar region log juga tersedia di Platform Referensi Logging Enumerations API.

Region log biasanya digunakan sebagai parameter dalam fungsi log. Semua region diaktifkan secara default.

Fungsi logging default

Fungsi default untuk logging dalam OpenThread adalah otPlatLog, yang ditentukan sebagai konstanta konfigurasi waktu kompilasi OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION.

Lihat Platform Logging API untuk informasi selengkapnya tentang fungsi ini.

Untuk menggunakan fungsi ini secara langsung di aplikasi contoh OpenThread, gunakan OT_REFERENCE_DEVICE opsi cmake. Misalnya, untuk menggunakannya dalam aplikasi CLI untuk contoh CC2538:

./script/build -DOT_REFERENCE_DEVICE=ON

Atau, perbarui file openthread/etc/cmake/options.cmake untuk mengaktifkannya secara default saat mem-build.

Cara mengaktifkan log

Sebelum mengaktifkan log, pastikan lingkungan Anda dikonfigurasi untuk membangun OpenThread. Lihat Membuat OpenThread untuk informasi selengkapnya.

Aktifkan semua log

Untuk mengaktifkan semua level dan region log dengan cepat, gunakan opsi cmake OT_FULL_LOGS:

./script/build -DOT_FULL_LOGS=ON

Tombol ini menetapkan level log ke OT_LOG_LEVEL_DEBG dan mengaktifkan semua wilayah penanda.

Mengaktifkan level log tertentu

Untuk mengaktifkan level log tertentu, edit openthread/src/core/config/logging.h dan perbarui OPENTHREAD_CONFIG_LOG_LEVEL ke level yang diinginkan, lalu bangun OpenThread. Sebagai misalnya, untuk mengaktifkan log hingga OT_LOG_LEVEL_INFO:

#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build

Lihat log di syslog

Log dikirim ke syslog secara default. Di Linux, namanya adalah /var/log/syslog.

  1. Buat contoh simulasi dengan semua log diaktifkan:
    cd openthread
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  2. Mulai node yang disimulasikan:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  3. Di jendela terminal baru, siapkan output real-time dari log OT:
    tail -F /var/log/syslog | grep "ot-cli-ftd"
    
  4. Pada node yang disimulasikan, tampilkan Thread:
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

Beralih kembali ke jendela terminal yang menjalankan perintah tail. Log akan ditampilkan secara {i>real time<i} untuk node yang disimulasikan. Perhatikan tag log dalam output: [INFO], [DEBG], [NOTE]. Semua ini sesuai pada level log. Misalnya, jika Anda mengubah level log ke OT_LOG_LEVEL_INFO, log DEBG akan menghilang dari output.

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)

Melihat log di aplikasi CLI

Log dapat dilihat langsung di aplikasi contoh OpenThread CLI.

  1. Edit file konfigurasi untuk platform contoh dan ubah log output ke aplikasi. Untuk contoh simulasinya adalah openthread/examples/platforms/simulation/openthread-core-simulation-config.h:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. Buat contoh simulasi dengan level log yang diinginkan. Untuk mengaktifkan semua log:
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  3. Mulai node yang disimulasikan:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. Anda akan melihat {i>output log<i} di jendela yang sama dengan OpenThread CLI dengan akan diproses.

Jika Anda telah menambahkan {i>logging<i} khusus dan mengaktifkan semua log, {i>buffer<i} baris CLI atau {i>buffer<i} mungkin tidak cukup besar untuk menangani log khusus tambahan. Jika beberapa log tidak muncul saat seharusnya, cobalah meningkatkan ukuran garis CLI buffer, ditetapkan sebagai OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH dalam /openthread/src/cli/cli_config.h atau menambah ukuran buffer transmisi UART, yang didefinisikan sebagai OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE di file konfigurasi platform, seperti /src/nrf52840/openthread-core-nrf52840-config.h.

Melihat log untuk NCP

Log untuk NCP dapat dikirim melalui wpantund ke syslog host. Untuk Host Linux, ini adalah /var/log/syslog.

Gunakan nilai OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP untuk mengaktifkan logging NCP. Ubah ini di file konfigurasi platform.

Misalnya, untuk mengaktifkan opsi ini untuk nrf52840 yang terhubung ke host Linux:

  1. Edit file konfigurasi untuk platform dan ubah output log menjadi aplikasi. Untuk nrf52840, ini adalah ./src/nrf52840/openthread-core-nrf52840-config.h di repositori ot-nrf528xx:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. Buat contoh nrf52840 dengan tingkat log yang diinginkan dan Tanda khusus NCP. Untuk membuat joiner dengan semua log diaktifkan:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
  3. Lakukan flash NCP, hubungkan ke host Linux, dan mulai wpantund sebagai yang dijelaskan dalam repositori wpantund.

  4. Setelah NCP berjalan, periksa syslog di mesin Linux:

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

  5. Anda akan melihat log OpenThread ditampilkan secara real time untuk NCP. Anda mungkin melihatnya juga dalam output wpantund.

Mengubah level log saat runtime

Level log dapat diubah saat runtime jika kontrol level log dinamis diaktifkan.

  1. Build aplikasi dengan opsi -DOT_LOG_LEVEL_DYNAMIC=ON. Sebagai contoh,
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
  2. Ubah level log bergantung pada implementasi Anda:
    1. Untuk system-on-chip (SoC), menggunakan Logging API dalam aplikasi OpenThread.
    2. Untuk NCP, gunakan wpanctl pada command line. Lihat wpan-properties.h di repositori wpantund untuk mengetahui semua properti yang diekspos ke wpanctl dan Spinel API untuk mengetahui definisi level log-nya.
      wpanctl set OpenThread:LogLevel 5