OpenThread लॉग

GitHub पर सोर्स देखें

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

लॉग क्षेत्रों की सूची प्लैटफ़ॉर्म पर भी उपलब्ध है Logging Enumerations एपीआई का रेफ़रंस.

लॉग फ़ंक्शन का इस्तेमाल, आम तौर पर लॉग फ़ंक्शन में पैरामीटर के तौर पर किया जाता है. सभी क्षेत्र हैं डिफ़ॉल्ट रूप से चालू रहता है.

डिफ़ॉल्ट लॉगिंग फ़ंक्शन

OpenThread में लॉग करने के लिए, डिफ़ॉल्ट फ़ंक्शन otPlatLog है. इसे इस तरह से परिभाषित किया गया है इसका कंपाइल-टाइम कॉन्फ़िगरेशन कॉन्सटेंट OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION.

Platform Logging API देखें संदर्भ देखें.

इस फ़ंक्शन को सीधे OpenThread उदाहरण ऐप्लिकेशन में इस्तेमाल करने के लिए, OT_REFERENCE_DEVICE का इस्तेमाल करें cmake का विकल्प चुनें. उदाहरण के लिए, CC2538 वाले उदाहरण के लिए, सीएलआई ऐप्लिकेशन में इसका इस्तेमाल करने के लिए:

./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. है

  1. सभी लॉग को चालू करके सिम्युलेशन का उदाहरण बनाएं:
    cd openthread
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  2. सिम्युलेट किया गया नोड शुरू करें:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  3. नई टर्मिनल विंडो में, ओटी लॉग का रीयल-टाइम आउटपुट सेट अप करें:
    tail -F /var/log/syslog | grep "ot-cli-ftd"
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  4. सिम्युलेट किए गए नोड पर, थ्रेड को लाएं:
dataset init new
Done
dataset
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
Done
dataset commit active
Done
ifconfig up
Done
thread 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 उदाहरण ऐप्लिकेशन में देखे जा सकते हैं.

  1. उदाहरण वाले प्लैटफ़ॉर्म के लिए, कॉन्फ़िगरेशन फ़ाइल में बदलाव करें और लॉग बदलें आउटपुट को ऐप्लिकेशन में एक्सपोर्ट करता है. सिम्युलेशन उदाहरण के लिए, यह है openthread/examples/platforms/simulation/openthread-core-simulation-config.h:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. मनमुताबिक लॉग के लेवल के साथ सिम्युलेशन का उदाहरण बनाएं. सभी को चालू करने के लिए लॉग:
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  3. सिम्युलेट किया गया नोड शुरू करें:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  4. आपको लॉग आउटपुट उसी विंडो में दिखना चाहिए जिसमें OpenThread सीएलआई ऐसा है निर्देशों को प्रोसेस किया जाता है.

अगर आपने कस्टम लॉगिंग जोड़ी है और सभी लॉग को चालू किया है, तो सीएलआई लाइन बफ़र या यूएआरटी ट्रांसमिशन बफ़र इतना बड़ा नहीं है कि अतिरिक्त कस्टम लॉग मैनेज किए जा सकें. अगर कुछ लॉग जब चाहिए हो, तब सीएलआई लाइन का साइज़ बढ़ाकर देखें बफ़र, जिसकी जानकारी को 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.

एनसीपी के लॉग देखें

किसी एनसीपी के लॉग, wpantund के ज़रिए होस्ट के syslog को भेजे जा सकते हैं. Linux होस्ट, यह /var/log/syslog. है

OPENTHREAD_CONFIG_LOG_OUTPUT वैल्यू का इस्तेमाल करें NCP लॉगिंग चालू करने के लिए OPENTHREAD_CONFIG_LOG_OUTPUT_APP. इसे इसमें बदलें प्लैटफ़ॉर्म की कॉन्फ़िगरेशन फ़ाइल पर.

उदाहरण के लिए, Linux होस्ट से कनेक्ट किए गए nrf52840 के लिए इसे चालू करने के लिए:

  1. प्लैटफ़ॉर्म की कॉन्फ़िगरेशन फ़ाइल में बदलाव करें और लॉग आउटपुट को इसमें बदलें ऐप खोलें. nrf52840 के लिए, यह ot-nrf528xx डेटा स्टोर करने की जगह में ./src/nrf52840/openthread-core-nrf52840-config.h:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. लॉग के मनमुताबिक लेवल वगैरह की मदद से nrf52840 का उदाहरण बनाएं एनसीपी से जुड़े फ़्लैग. सभी लॉग को चालू करने वाला जॉइनर बनाने के लिए:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  3. एनसीपी को फ़्लैश करें, उसे Linux होस्ट से कनेक्ट करें, और wpantund को इस तरह शुरू करें: की पूरी जानकारी wpantund रिपॉज़िटरी में मौजूद है.

  4. एनसीपी चालू होने के बाद, Linux मशीन पर syslog देखें:

    tail -F /var/log/syslog | grep "wpantund"
    

  5. आपको एनसीपी के लिए, OpenThread लॉग रीयल टाइम में दिखेंगे. आप इन्हें wpantund आउटपुट में भी देखा जा सकता है.

रन टाइम के दौरान लॉग लेवल बदलना

डाइनैमिक लॉग लेवल कंट्रोल के चालू होने पर, रन टाइम के दौरान लॉग लेवल बदले जा सकते हैं.

  1. -DOT_LOG_LEVEL_DYNAMIC=ON विकल्प का इस्तेमाल करके ऐप्लिकेशन बनाएं. उदाहरण के लिए,
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  2. लागू करने के तरीके के आधार पर लॉग लेवल बदलें:
    1. सिस्टम-ऑन-चिप (SoC) के लिए, अपने खाते में Logging API का इस्तेमाल करें OpenThread ऐप्लिकेशन.
    2. एनसीपी के लिए, कमांड लाइन पर wpanctl का इस्तेमाल करें. wpanctl के पास मौजूद सभी प्रॉपर्टी और लॉग लेवल की परिभाषाओं के लिए Spinel API के लिए, wpantund डेटा स्टोर करने की जगह में wpan-properties.h देखें.
      wpanctl set OpenThread:LogLevel 5