Log OpenThread

Lihat sumber di GitHub

Log OpenThread dikontrol oleh banyak 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 ditentukan sebagai konstanta konfigurasi waktu kompilasi OPENTHREAD_CONFIG_LOG_OUTPUT. Opsi metode pencatatan log tercantum dalam file berikut:

openthread/src/core/config/logging.h

Konfigurasi output log default adalah OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED.

Metode output adalah contoh tempat Anda mungkin perlu memperbarui konstanta konfigurasi tingkat platform, bukan konstanta inti. Misalnya, untuk mengubah 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 menampilkan berbagai tingkat informasi, yang ditentukan sebagai konstanta konfigurasi waktu kompilasi OPENTHREAD_CONFIG_LOG_LEVEL. Opsi tingkat tercantum dalam file berikut:

openthread/include/openthread/platform/logging.h

Daftar tingkat log juga tersedia di referensi API Platform Logging Macros.

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

Region log

Wilayah log menentukan area kode OpenThread yang diaktifkan untuk logging. Pencacahan wilayah ditentukan dalam file berikut:

openthread/include/openthread/platform/logging.h

Daftar wilayah log juga tersedia di referensi API Enumerasi Logging Platform.

Wilayah log biasanya digunakan sebagai parameter dalam fungsi log. Semua wilayah 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 referensi API Platform Logging untuk mengetahui informasi selengkapnya tentang fungsi ini.

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

./script/build -DOT_REFERENCE_DEVICE=ON

Atau, perbarui file openthread/etc/cmake/options.cmake agar diaktifkan secara default saat membangun.

Cara mengaktifkan log

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

Aktifkan semua log

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

./script/build -DOT_FULL_LOGS=ON

Tombol ini menetapkan tingkat log ke OT_LOG_LEVEL_DEBG dan mengaktifkan semua tanda wilayah.

Mengaktifkan tingkat log tertentu

Untuk mengaktifkan tingkat log tertentu, edit openthread/src/core/config/logging.h dan perbarui OPENTHREAD_CONFIG_LOG_LEVEL ke tingkat yang diinginkan, lalu buat OpenThread. Misalnya, untuk mengaktifkan log hingga OT_LOG_LEVEL_INFO:

#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build

Melihat log di syslog

Log dikirim ke syslog secara default. Di Linux, ini 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 simulasi:
    ./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 simulasi, 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

Kembali ke jendela terminal yang menjalankan perintah tail. Log akan ditampilkan secara real time untuk node simulasi. Perhatikan tag log dalam output: [INFO], [DEBG], [NOTE]. Semua ini sesuai dengan tingkat log. Misalnya, jika Anda mengubah level log menjadi OT_LOG_LEVEL_INFO, log DEBG akan hilang 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 output log ke aplikasi. Untuk contoh simulasi, ini 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 tingkat log yang diinginkan. Untuk mengaktifkan semua log:
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  3. Mulai node simulasi:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. Anda akan melihat output log di jendela yang sama dengan OpenThread CLI saat perintah diproses.

Jika Anda telah menambahkan logging kustom dan mengaktifkan semua log, buffer baris CLI atau buffer transmisi UART mungkin tidak cukup besar untuk menangani log kustom tambahan. Jika beberapa log tidak muncul saat seharusnya, coba tingkatkan ukuran buffer baris CLI, yang ditentukan sebagai OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH di /openthread/src/cli/cli_config.h, atau tingkatkan ukuran buffer transmisi UART, yang ditentukan sebagai OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE dalam file konfigurasi platform, seperti /src/nrf52840/openthread-core-nrf52840-config.h.

Mengubah level log saat runtime

Tingkat log dapat diubah saat runtime jika kontrol tingkat log dinamis diaktifkan.

  1. Bangun aplikasi dengan opsi -DOT_LOG_LEVEL_DYNAMIC=ON. Misalnya,
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
  2. Gunakan Logging API dalam aplikasi OpenThread Anda.