יומני 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 של Platform Logging Enumerations.

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

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

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

מידע נוסף על הפונקציה הזו זמין במאמר בנושא Platform Logging API reference.

כדי להשתמש בפונקציה הזו ישירות באפליקציות לדוגמה של OpenThread, משתמשים באפשרות OT_REFERENCE_DEVICE cmake. לדוגמה, כדי להשתמש בו באפליקציית ה-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.

שינוי רמת היומן בזמן הריצה

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

  1. פיתוח האפליקציה באמצעות האפשרות -DOT_LOG_LEVEL_DYNAMIC=ON. לדוגמה,
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
  2. משתמשים ב-Logging API באפליקציית OpenThread.