יומני 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

רשימת רמות היומן זמינה גם במסמך העזרה של Platform Logging Macros.

רמת היומן שמוגדרת כברירת מחדל היא OT_LOG_LEVEL_CRIT, שמפיקה רק את היומנים הקריטיים ביותר. משנים את הרמה כדי לראות עוד יומנים לפי הצורך. כדי להציג את כל יומני OpenThread, צריך להשתמש ב-OT_LOG_LEVEL_DEBG.

אזורי יומנים

אזורי היומנים קובעים אילו אזורים בקוד של OpenThread מופעלים לצורך רישום ביומן. ספירת האזורים מוגדרת בקובץ הבא:

openthread/include/openthread/platform/logging.h

רשימת אזורי היומנים זמינה גם במאמר העזרה בנושא רשימות של Enumerations ביומן הפלטפורמה.

אזורי יומנים משמשים בדרך כלל כפרמטרים בפונקציות יומן. כל האזורים מופעלים כברירת מחדל.

פונקציית ברירת המחדל לרישום ביומן

פונקציית ברירת המחדל לרישום ביומן ב-OpenThread היא otPlatLog, שמוגדרת כקבועת ההגדרה של OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION בזמן הידור.

מידע נוסף על הפונקציה הזו זמין במסמך העזרה של API לרישום ביומן של פלטפורמה.

כדי להשתמש בפונקציה הזו ישירות באפליקציות לדוגמה של OpenThread, משתמשים באפשרות cmake OT_REFERENCE_DEVICE. לדוגמה, כדי להשתמש בו באפליקציית ה-CLI בדוגמה של CC2538:

./script/build -DOT_REFERENCE_DEVICE=ON

לחלופין, אפשר לעדכן את הקובץ openthread/etc/cmake/options.cmake כדי להפעיל אותו כברירת מחדל במהלך ה-build.

איך מפעילים יומנים

לפני שמפעילים יומנים, צריך לוודא שהסביבה מוגדרת לפי הצורך ליצירת 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. בצומת הסימולציה, מציגים את פרוטוקול 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. פלט היומן אמור להופיע באותו חלון כמו OpenThread CLI בזמן עיבוד הפקודות.

אם הוספתם רישום ביומן בהתאמה אישית והפעלתם את כל היומנים, יכול להיות שמאגר השורות של 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.

כדי להפעיל את הרישום ביומן של NCP, צריך להשתמש בערך OPENTHREAD_CONFIG_LOG_OUTPUT של OPENTHREAD_CONFIG_LOG_OUTPUT_APP. משנים את זה בקובץ התצורה של הפלטפורמה.

לדוגמה, כדי להפעיל את האפשרות הזו עבור 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 עם רמת הרישום הרצויה ביומן ודגלים אחרים ספציפיים ל-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. מריצים את ה-build של האפליקציה באמצעות האפשרות -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), צריך להשתמש ב-Logging API באפליקציית OpenThread.
    2. ב-NCP, משתמשים ב-wpanctl בשורת הפקודה. במאגר wpantund, בקובץ wpan-properties.h מפורטים כל המאפיינים שנחשפים ל-wpanctl, וב-Spinel API מפורטות ההגדרות של רמות היומן.
      wpanctl set OpenThread:LogLevel 5