يتم التحكم في سجلات 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_DEVICE
cmake. على سبيل المثال، لاستخدامه ضمن تطبيق سطر الأوامر (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.
- أنشِئ مثالاً للمحاكاة مع تفعيل جميع السجلّات:
cd openthread
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- بدء عقدة محاكاة:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- في نافذة طرفية جديدة، يمكنك إعداد مخرجات لسجلات OT في الوقت الفعلي:
tail -F /var/log/syslog | grep "ot-cli-ftd"
- في العقدة التي تمت محاكاتها، يمكنك عرض Thread:
dataset init new
Donedataset
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 Donedataset commit active
Doneifconfig up
Donethread 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.
- عدِّل ملف الإعداد لنموذج النظام الأساسي وغيِّر مخرجات السجل إلى التطبيق. على سبيل المثال، هذا هو
openthread/examples/platforms/simulation/openthread-core-simulation-config.h
:#define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
- أنشئ نموذج المحاكاة مع المستوى المطلوب للسجلات. لتمكين جميع السجلات:
./script/cmake-build simulation -DOT_FULL_LOGS=ON
- بدء عقدة محاكاة:
./build/simulation/examples/apps/cli/ot-cli-ftd 1
- من المفترض أن تظهر لك نتيجة السجلّ في النافذة نفسها التي تظهر فيها واجهة سطر الأوامر لـ 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:
- عدّل ملف الإعداد للنظام الأساسي وغيّر إخراج السجل إلى التطبيق. بالنسبة إلى nrf52840، هذا هو
./src/nrf52840/openthread-core-nrf52840-config.h
في مستودع ot-nrf528xx:#define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
- أنشئ مثالاً على nrf52840 مع المستوى المطلوب من السجلات وعلامات أخرى خاصة بـ NCP. لإنشاء رابط مع تفعيل جميع السجلات:
./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
يمكنك تثبيت NCP، وتوصيله بمضيف Linux، وبدء
wpantund
كما هو مفصل في مستودع wpantund.بعد تشغيل NCP، تحقَّق من
syslog
على جهاز Linux:tail -F /var/log/syslog | grep "wpantund"
من المفترض أن تظهر لك سجلات OpenThread في الوقت الفعلي لبروتوكول NCP. وقد تراها أيضًا في الناتج
wpantund
.
تغيير مستوى السجلّ في وقت التشغيل
يمكن تغيير مستويات السجل في وقت التشغيل في حالة تمكين التحكم الديناميكي في مستوى السجل.
- يمكنك إنشاء التطبيق باستخدام الخيار
-DOT_LOG_LEVEL_DYNAMIC=ON
. على سبيل المثال،./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
- غيِّر مستوى السجلّ وفقًا لعملية التنفيذ:
- بالنسبة إلى النظام على الرقاقة (SoC)، استخدم واجهة برمجة تطبيقات التسجيل داخل تطبيق OpenThread.
- بالنسبة إلى NCP، استخدِم
wpanctl
في سطر الأوامر. يمكنك الاطّلاع علىwpan-properties.h
في مستودعwpantund
لمعرفة جميع المواقع الإلكترونية التي تظهر فيهاwpanctl
وSpinel API لمعرفة تعريفاتها على مستوى السجلّ.wpanctl set OpenThread:LogLevel 5