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 के उदाहरण के लिए, CLI ऐप्लिकेशन में इसका इस्तेमाल करने के लिए:
./script/build -DOT_REFERENCE_DEVICE=ON
इसके अलावा, openthread/etc/cmake/options.cmake
फ़ाइल को अपडेट करके, उसे डिफ़ॉल्ट रूप से चालू किया जा सकता है.
लॉग चालू करने का तरीका
लॉग चालू करने से पहले, पक्का करें कि आपका एनवायरमेंट, OpenThread बनाने के लिए कॉन्फ़िगर किया गया हो. ज़्यादा जानकारी के लिए, OpenThread का इस्तेमाल करें सेक्शन देखें.
सभी लॉग चालू करें
सभी लॉग लेवल और क्षेत्रों को तुरंत चालू करने के लिए, 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 में लॉग देखना
लॉग, डिफ़ॉल्ट रूप से 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 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 सीएलआई है, जिस पर कमांड को प्रोसेस किया जाता है.
अगर आपने कस्टम लॉगिंग जोड़ी है और सभी लॉग चालू किए हैं, तो हो सकता है कि अतिरिक्त कस्टम लॉग को मैनेज करने के लिए, सीएलआई लाइन बफ़र या यूएआरटी ट्रांसमिट बफ़र काफ़ी बड़ा न हो. अगर कुछ लॉग तय समय पर नहीं दिख रहे हैं, तो सीएलआई लाइन बफ़र का साइज़ बढ़ाकर देखें. इसे /openthread/src/cli/cli_config.h
में OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH
के तौर पर दिखाया गया है. इसके अलावा, प्लैटफ़ॉर्म की कॉन्फ़िगरेशन फ़ाइल में UART ट्रांसमिट बफ़र का साइज़ बढ़ाकर देखें. इसे /src/nrf52840/openthread-core-nrf52840-config.h
जैसी फ़ाइल में OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE
के तौर पर दिखाया गया है.
एनसीपी के लिए लॉग देखना
किसी एनसीपी के लॉग, wpantund
के ज़रिए होस्ट के syslog
पर भेजे जा सकते हैं. Linux होस्ट के लिए, यह /var/log/syslog.
है
एनसीपी लॉगिंग चालू करने के लिए, OPENTHREAD_CONFIG_LOG_OUTPUT
की वैल्यू के तौर पर
OPENTHREAD_CONFIG_LOG_OUTPUT_APP
का इस्तेमाल करें. इसे प्लैटफ़ॉर्म की कॉन्फ़िगरेशन फ़ाइल में बदलें.
उदाहरण के लिए, Linux होस्ट से कनेक्ट किए गए nrf52840 के लिए, इसे चालू करने के लिए:
- प्लैटफ़ॉर्म के लिए कॉन्फ़िगरेशन फ़ाइल में बदलाव करें और लॉग आउट को ऐप्लिकेशन में बदलें. nrf52840 के लिए, यह ot-nrf528xx रिपॉज़िटरी में
./src/nrf52840/openthread-core-nrf52840-config.h
है:#define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
- अपनी पसंद के लेवल के लॉग और एनसीपी से जुड़े अन्य फ़्लैग के साथ, nrf52840 का उदाहरण बनाएं. सभी लॉग चालू करके जॉइनर बनाने के लिए:
./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
एनसीपी को फ़्लैश करें, उसे Linux होस्ट से कनेक्ट करें, और wpantund रिपॉज़िटरी में बताए गए तरीके से
wpantund
शुरू करें.एनसीपी चालू होने के बाद, Linux मशीन पर
syslog
देखें:tail -F /var/log/syslog | grep "wpantund"
आपको एनसीपी के लिए, OpenThread लॉग रीयल टाइम में दिखेंगे. ये वैल्यू,
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 ऐप्लिकेशन में लॉगिंग एपीआई का इस्तेमाल करें.
- एनसीपी के लिए, कमांड लाइन पर
wpanctl
का इस्तेमाल करें.wpanctl
को एक्सपोज़ की गई सभी प्रॉपर्टी के लिए,wpantund
रिपॉज़िटरी मेंwpan-properties.h
देखें. साथ ही, लॉग लेवल की परिभाषाओं के लिए Spinel API देखें.wpanctl set OpenThread:LogLevel 5