يتم التحكّم في سجلات 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.
- إنشاء مثال المحاكاة مع تفعيل جميع السجلات:
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)
عرض السجلّات في تطبيق واجهة سطر الأوامر
يمكن عرض السجلات مباشرةً في تطبيق المثال 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
يمكن إرسال سجلات وحدة التحكّم في حدود الجلسة من خلال wpantund
إلى syslog
المضيف. بالنسبة لمضيف Linux، هذا هو /var/log/syslog.
استخدِم قيمة OPENTHREAD_CONFIG_LOG_OUTPUT
OPENTHREAD_CONFIG_LOG_OUTPUT_APP
لتفعيل تسجيل "المعالجة المحدودة للطلبات". يمكنك تغيير ذلك في
ملف إعدادات المنصة.
على سبيل المثال، لتمكين هذا لـ 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)، استخدِم Logging API في تطبيق OpenThread.
- بالنسبة إلى وحدة التحكّم في الشبكة (NCP)، استخدِم
wpanctl
في سطر الأوامر. يمكنك الاطّلاع علىwpan-properties.h
في مستودعwpantund
لجميع السمات المعروضة فيwpanctl
وSpinel API لمعرفة التعريفات على مستوى السجلّ.wpanctl set OpenThread:LogLevel 5