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

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

تُستخدَم مناطق السجلّ عادةً كمَعلمات في دوال السجلّ. يتم تفعيل جميع المناطق تلقائيًا.

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

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

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

لاستخدام هذه الدالة مباشرةً في تطبيقات 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 ويفعّل جميع علامات المناطق.

تفعيل مستوى معيّن من السجلات

لتفعيل مستوى معيّن من السجلات، عدِّل 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. في العقدة المحاكية، اعرض سلسلة المحادثات:
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)

عرض السجلات في تطبيق واجهة سطر الأوامر

يمكن عرض السجلات مباشرةً في تطبيق 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 أثناء معالجة الأوامر.

إذا أضفت تسجيلًا مخصّصًا وفعّلت جميع السجلات، قد لا يكون مخزن مؤقت لسطر واجهة سطر الأوامر أو مخزن مؤقت لنقل 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.