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/src/core/config/logging.h के बजाय openthread/examples/platforms/simulation/openthread-core-simulation-config.h में बदलाव करें.
लॉग लेवल
लॉग से अलग-अलग लेवल की जानकारी मिल सकती है. इसे कंपाइल-टाइम कॉन्फ़िगरेशन कॉन्स्टेंट OPENTHREAD_CONFIG_LOG_LEVEL के तौर पर तय किया जाता है. लेवल के विकल्प, इस फ़ाइल में दिए गए हैं:
openthread/include/openthread/platform/logging.h
लॉग लेवल की सूची, Platform Logging Macros एपीआई के रेफ़रंस में भी उपलब्ध है.
डिफ़ॉल्ट लॉग लेवल 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 - नई टर्मिनल विंडो में, ओटी लॉग का रीयल-टाइम आउटपुट सेट अप करें:
tail -F /var/log/syslog | grep "ot-cli-ftd" - सिमुलेट किए गए नोड पर, थ्रेड को ऊपर लाएं:
dataset init newDonedatasetActive 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 activeDoneifconfig upDonethread startDone
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 वाली विंडो में ही लॉग आउटपुट दिखेगा, क्योंकि कमांड प्रोसेस की जाती हैं.
अगर आपने कस्टम लॉगिंग जोड़ी है और सभी लॉग चालू किए हैं, तो हो सकता है कि सीएलआई लाइन बफ़र या यूएआरटी ट्रांसमिट
बफ़र, अतिरिक्त कस्टम लॉग को मैनेज करने के लिए काफ़ी बड़ा न हो. अगर कुछ लॉग, दिखने के समय पर नहीं दिख रहे हैं, तो सीएलआई लाइन बफ़र का साइज़ बढ़ाने की कोशिश करें. इसे OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH में /openthread/src/cli/cli_config.h के तौर पर तय किया जाता है. इसके अलावा, यूएआरटी ट्रांसमिट बफ़र का साइज़ भी बढ़ाया जा सकता है. इसे प्लैटफ़ॉर्म की कॉन्फ़िगरेशन फ़ाइल में 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- अपने OpenThread ऐप्लिकेशन में Logging API का इस्तेमाल करें.