บันทึก 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/examples/platforms/simulation/openthread-core-simulation-config.h แทน openthread/src/core/config/logging.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

รายการภูมิภาคบันทึกยังอยู่ในเอกสารอ้างอิง API Enumerations การบันทึกของแพลตฟอร์มด้วย

โดยทั่วไปแล้ว ภูมิภาคบันทึกจะใช้เป็นพารามิเตอร์ในฟังก์ชันบันทึก ระบบจะเปิดใช้ทุกภูมิภาคโดยค่าเริ่มต้น

ฟังก์ชันการบันทึกเริ่มต้น

ฟังก์ชันเริ่มต้นสำหรับการบันทึกภายใน 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 และเปิด Flag ทั้งหมดของภูมิภาค

เปิดใช้บันทึกระดับที่เฉพาะเจาะจง

หากต้องการเปิดใช้บันทึกระดับใดระดับหนึ่ง ให้แก้ไข 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. ในโหนดจำลอง ให้เปิด 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

กลับไปที่หน้าต่างเทอร์มินัลที่ใช้คำสั่ง 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. คุณควรเห็นเอาต์พุตบันทึกในหน้าต่างเดียวกับ CLI ของ OpenThread ขณะที่ระบบประมวลผลคําสั่ง

หากคุณเพิ่มการบันทึกที่กำหนดเองและเปิดใช้บันทึกทั้งหมด บัฟเฟอร์บรรทัด 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 โดยให้ทำการเปลี่ยนแปลงในไฟล์การกำหนดค่าของแพลตฟอร์ม

ตัวอย่างเช่น หากต้องการเปิดใช้ฟีเจอร์นี้สําหรับ nrf52840 ที่เชื่อมต่อกับโฮสต์ Linux ให้ทําดังนี้

  1. แก้ไขไฟล์การกำหนดค่าสำหรับแพลตฟอร์มและเปลี่ยนเอาต์พุตของบันทึกไปยังแอป สำหรับ nrf52840 นี่คือ ./src/nrf52840/openthread-core-nrf52840-config.h ในที่เก็บ ot-nrf528xx:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. สร้างตัวอย่าง nrf52840 ด้วยระดับบันทึกที่ต้องการและ Flag อื่นๆ สำหรับ NCP โดยเฉพาะ หากต้องการสร้างตัวผนวกที่เปิดใช้บันทึกทั้งหมด ให้ทำดังนี้
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
  3. แฟลช NCP, เชื่อมต่อกับโฮสต์ Linux และเริ่ม wpantund ตามที่อธิบายไว้ในที่เก็บ wpantund

  4. เมื่อ NCP ทำงานอยู่ ให้ตรวจสอบ syslog ในเครื่อง Linux ดังนี้

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

  5. คุณควรเห็นบันทึก OpenThread แสดงแบบเรียลไทม์สำหรับ NCP คุณอาจเห็นคำเหล่านี้ในเอาต์พุต 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. สำหรับ system-on-chip (SoC) ให้ใช้ Laking API ในแอปพลิเคชัน OpenThread
    2. สำหรับ NCP ให้ใช้ wpanctl ในบรรทัดคำสั่ง ดูพร็อพเพอร์ตี้ทั้งหมดที่แสดงใน wpanctl และคำจำกัดความระดับบันทึกของ Spinel API ในที่เก็บข้อมูล wpan-properties.h
      wpanctl set OpenThread:LogLevel 5