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

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

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

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

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

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

لاستخدام هذه الدالة مباشرةً في أمثلة تطبيقات OpenThread، استخدِم الخيار OT_REFERENCE_DEVICE cmake. على سبيل المثال، لاستخدام واجهة سطر الأوامر في تطبيق 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. في العقدة المحاكية، اعرض 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)

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

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

يمكن إرسال سجلات وحدة التحكّم في حدود الجلسة من خلال wpantund إلى syslog المضيف. بالنسبة لمضيف Linux، هذا هو /var/log/syslog.

استخدِم قيمة OPENTHREAD_CONFIG_LOG_OUTPUTOPENTHREAD_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. أنشئ التطبيق باستخدام الخيار -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 في سطر الأوامر. يمكنك الاطّلاع على wpan-properties.h في مستودع wpantund لجميع السمات المعروضة في wpanctl وSpinel API لمعرفة التعريفات على مستوى السجلّ.
      wpanctl set OpenThread:LogLevel 5