سجلات 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

تتوفر أيضًا قائمة بمستويات السجلّ في مرجع واجهة برمجة التطبيقات لوحدات الماكرو في تسجيل النظام الأساسي.

إنّ مستوى السجلّ التلقائي هو OT_LOG_LEVEL_CRIT الذي يُنتج السجلّات الأكثر أهمية فقط. غيّر المستوى لعرض المزيد من السجلات بالشكل المطلوب. لعرض جميع سجلات OpenThread، يمكنك استخدام OT_LOG_LEVEL_DEBG.

مناطق السجلات

تحدد مناطق السجلات المناطق التي يتم تمكين تسجيلها في شفرة OpenThread. يتم تحديد تعداد المنطقة في الملف التالي:

openthread/include/openthread/platform/logging.h

تتوفّر قائمة مناطق السجلّ أيضًا في مرجع واجهة برمجة التطبيقات Enumerations لمنصة "إحصاءات المنصة".

يتم استخدام مناطق السجل بشكل شائع كمعلمات في دوال السجل. يتم تمكين جميع المناطق افتراضيًا.

وظيفة التسجيل التلقائية

الدالة التلقائية لتسجيل الدخول في OpenThread هي otPlatLog، وهي معرّف ثابت تهيئة وقت التجميع لـ OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION.

اطلع على مرجع واجهة برمجة التطبيقات لتسجيل الدخول في النظام الأساسي للحصول على المزيد من المعلومات عن هذه الدالة.

لاستخدام هذه الدالة مباشرة في تطبيقات OpenThread كأمثلة، استخدم الخيار OT_REFERENCE_DEVICEcmake. على سبيل المثال، لاستخدامه ضمن تطبيق سطر الأوامر (CLI) في مثال CC2538:

./script/build -DOT_REFERENCE_DEVICE=ON

ويمكنك بدلاً من ذلك تعديل ملف openthread/etc/cmake/options.cmake لتفعيله تلقائيًا عند الإنشاء.

كيفية تمكين السجلات

قبل تمكين السجلات، تأكد من تهيئة البيئة لإنشاء OpenThread. اطلع على إنشاء OpenThread للحصول على مزيد من المعلومات.

تفعيل كل السجلات

لتفعيل جميع مستويات المناطق ومناطق السجلّ بسرعة، استخدِم الخيار cmake لـ OT_FULL_LOGS:

./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 بشكل تلقائي. في نظام التشغيل 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 أثناء معالجة الأوامر.

إذا أضفت تسجيلاً مخصصًا ومكنت كل السجلات، فقد لا يكون المخزن المؤقت لسطر سطر الأوامر أو المخزن المؤقت لنقل UART كبيرًا بما يكفي للتعامل مع السجلات المخصصة الإضافية. في حال عدم ظهور بعض السجلّات في الوقت الذي يجب ظهورها فيه، يمكنك محاولة زيادة حجم المخزن المؤقت لسطر سطر الأوامر الذي يتم تحديده على أنه 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 مع المستوى المطلوب من السجلات وعلامات أخرى خاصة بـ 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. بالنسبة إلى النظام على الرقاقة (SoC)، استخدم واجهة برمجة تطبيقات التسجيل داخل تطبيق OpenThread.
    2. بالنسبة إلى NCP، استخدِم wpanctl في سطر الأوامر. يمكنك الاطّلاع على wpan-properties.h في مستودع wpantund لمعرفة جميع المواقع الإلكترونية التي تظهر فيها wpanctl وSpinel API لمعرفة تعريفاتها على مستوى السجلّ.
      wpanctl set OpenThread:LogLevel 5