يتم التحكّم في سجلات 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.
- أنشئ مثال المحاكاة مع تفعيل جميع السجلات:
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"
- في العقدة المحاكية، اعرض سلسلة المحادثات:
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)
عرض السجلات في تطبيق واجهة سطر الأوامر
يمكن عرض السجلات مباشرةً في تطبيق 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 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
.
تغيير مستوى السجلّ في وقت التشغيل
يمكن تغيير مستويات السجلّ في وقت التشغيل في حال تفعيل ميزة التحكّم الديناميكي في مستوى السجلّ.
- أنشئ التطبيق باستخدام الخيار
-DOT_LOG_LEVEL_DYNAMIC=ON
. على سبيل المثال:./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
- استخدِم Logging API ضمن تطبيق OpenThread.