Logcat कमांड-लाइन टूल

Logcat एक कमांड-लाइन टूल है, जो सिस्टम मैसेज का लॉग डंप करता है. इसमें मैसेज के साथ-साथ Log क्लास.

यह पेज कमांड-लाइन logcat टूल के बारे में है. हालांकि, आपके पास लॉग देखने का विकल्प भी है Android Studio में Logcat विंडो के मैसेज. इसके लिए Android Studio में लॉग देखने और फ़िल्टर करने के बारे में जानकारी, देखें लॉग देखें और लिखें Logcat.

लॉगिंग सिस्टम अवलोकन

Android का लॉगिंग सिस्टम, स्ट्रक्चर्ड सर्कुलर बफ़र का एक सेट है, जिसे सिस्टम मैनेज करता है logd प्रोसेस. उपलब्ध बफ़र का सेट तय किया गया है. इसे सिस्टम. सबसे ज़्यादा काम के बफ़र ये हैं:

  • main: ज़्यादातर ऐप्लिकेशन लॉग सेव करता है.
  • system: Android OS से आने वाले मैसेज सेव करता है.
  • crash: क्रैश लॉग स्टोर करते हैं. हर लॉग एंट्री की एक प्राथमिकता होती है. यह एक ऐसा टैग होता है जो लॉग के ऑरिजिन और असल लॉग मैसेज को दिखाता है.

यह लॉगिंग सिस्टम का मुख्य C/C++ इंटरफ़ेस है, जो शेयर की गई लाइब्रेरी liblog है और उसका हेडर <android/log.h>. भाषा के हिसाब से लॉगिंग की सभी सुविधाएं (android.util.Log सहित) आखिरकार, फ़ंक्शन को कॉल करें __android_log_write. डिफ़ॉल्ट रूप से, यह फ़ंक्शन को कॉल करता है __android_log_logd_logger, जो logd को लॉग एंट्री भेजता है सॉकेट का इस्तेमाल करता है. एपीआई लेवल 30 और इसके बाद के वर्शन में, कॉल करके लॉग करने वाले फ़ंक्शन को बदला जा सकता है __android_set_log_writer. ज़्यादा जानकारी यहां पाएं: NDK दस्तावेज़.

adb logcat के दिखाए गए लॉग, फ़िल्टर करने के चार लेवल से गुज़रते हैं:

कंपाइल-टाइम फ़िल्टर करना
कंपाइलेशन सेटिंग के आधार पर, कुछ लॉग पूरी तरह से कॉपी हो सकते हैं बाइनरी से निकाला जाता है. उदाहरण के लिए, ProGuard को Java कोड से Log.d.
सिस्टम की प्रॉपर्टी को फ़िल्टर करना
liblog, सिस्टम प्रॉपर्टी के एक सेट को क्वेरी करता है logd को भेजे जाने वाला कम से कम गंभीरता स्तर तय करें. अगर आपके लॉग में टैग MyApp, तो नीचे दी गई प्रॉपर्टी की जांच की गई है और उनमें शामिल होना चाहिए सबसे कम गंभीरता का पहला अक्षर (V, D, I, W, E या S से सभी लॉग बंद करने के लिए कहें):
  • log.tag.MyApp
  • persist.log.tag.MyApp
  • log.tag
  • persist.log.tag
ऐप्लिकेशन फ़िल्टर करना
अगर कोई भी प्रॉपर्टी सेट नहीं की गई है, तो liblog इसके लिए सेट की गई प्राथमिकता की कम से कम सीमा का इस्तेमाल करता है __android_log_set_minimum_priority. यहां डिफ़ॉल्ट सेटिंग यह है INFO.
डिसप्ले फ़िल्टर करना
adb logcat में ऐसे दूसरे फ़िल्टर भी इस्तेमाल किए जा सकते हैं जो logd से दिखाई गई लॉग की संख्या. इसके बारे में सेक्शन देखें लॉग आउटपुट को फ़िल्टर करने की सुविधा का इस्तेमाल करें.

कमांड-लाइन सिंटैक्स

logcat को adb शेल के ज़रिए चलाने के लिए, आम तौर पर इसका इस्तेमाल इस तरह से किया जाता है:

[adb] shell logcat [<option>] ... [<filter-spec>] ...

adb logcat का शॉर्टहैंड भी है, लेकिन यह adb shell logcat.

विकल्प

logcat में कई विकल्प मौजूद हैं. कौनसे विकल्प उपलब्ध होंगे, यह ओएस पर निर्भर करता है का उपयोग कर रहे हैं. नीचे दी गई, logcat से जुड़ी खास जानकारी देखने के लिए जिस डिवाइस का इस्तेमाल किया जा रहा है उस पर यह काम करें:

    adb logcat --help
    

ध्यान दें कि logcat एक टूल है. इसे ओएस डेवलपर के साथ-साथ ऐप्लिकेशन डेवलपर के लिए भी इस्तेमाल किया जा सकता है (ऐसे ऐप्लिकेशन डेवलपर जो इसके बजाय Android Studio का इस्तेमाल करना चाहते हैं) पर ऐसे कई विकल्प हैं root के रूप में इस्तेमाल किया जा सकता है.

लॉग आउटपुट फ़िल्टर करें

लॉग मैसेज का टैग एक छोटी स्ट्रिंग होती है, जो सिस्टम के उस कॉम्पोनेंट के बारे में बताती है जहां मैसेज शुरू होगा. उदाहरण के लिए, "View" पर क्लिक करें.

प्राथमिकता, नीचे दी गई वर्ण वैल्यू में से एक है. वैल्यू को सबसे कम से सबसे ज़्यादा के क्रम में लगाया गया है प्राथमिकता:

    • V: Verbose (सबसे कम प्राथमिकता)
    • D: डीबग
    • I: जानकारी
    • W: चेतावनी
    • E: गड़बड़ी
    • F: घातक
    • S: साइलेंट (सबसे अहम प्राथमिकता, जहां कभी भी प्रिंट नहीं किया जाता)
  • प्राथमिकताओं के साथ सिस्टम में इस्तेमाल किए गए टैग की सूची पाने के लिए, logcat और हर मैसेज के पहले दो कॉलम देखें, जो इस तरह दिए गए हैं <priority>/<tag>.

    नीचे दिए गए आउटपुट में, logcat logcat -v brief output निर्देश. आउटपुट से पता चलता है कि मैसेज इससे जुड़ा है प्राथमिकता लेवल "I" और टैग "ActivityManager":

    I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}
    

    लॉग आउटपुट को मैनेज करने लायक लेवल तक कम करने के लिए, फ़िल्टर का इस्तेमाल करके लॉग आउटपुट को सीमित करें एक्सप्रेशन के बारे में ज़्यादा जानें. फ़िल्टर एक्सप्रेशन की मदद से, सिस्टम को टैग की प्राथमिकता के बारे में बताया जा सकता है जिनमें आपकी दिलचस्पी है. सिस्टम, तय टैग.

    फ़िल्टर एक्सप्रेशन इस फ़ॉर्मैट tag:priority ... को फ़ॉलो करता है, जहां tag रुचि के टैग को दिखाता है और priority इसका कम से कम लेवल दिखाता है प्राथमिकता तय करें. तय प्राथमिकता पर या उससे ऊपर उस टैग के लिए मैसेज हैं लॉग पर लिखा जाता है. में tag:priority की कोई भी संख्या डालें वाला एक फ़िल्टर एक्सप्रेशन है. स्पेसिफ़िकेशन की सीरीज़ में, खाली सफ़ेद जगह को डीलिमिटेड किया जाता है.

    नीचे एक फ़िल्टर एक्सप्रेशन का उदाहरण दिया गया है, जो इसे छोड़कर सभी लॉग मैसेज को छिपा देता है वे जिनमें "ActivityManager" टैग लगा हो प्राथमिकता पर "जानकारी" या वे टैग वाले टैग हैं "मेरा ऐप्लिकेशन" "डीबग" प्राथमिकता के साथ या इससे ज़्यादा है:

    adb logcat ActivityManager:I MyApp:D *:S
    

    पूर्ववर्ती एक्सप्रेशन का अंतिम एलिमेंट, *:S, इसके लिए प्राथमिकता स्तर सेट करता है सभी टैग "साइलेंट" में डाल देते हैं, जिससे यह पक्का होता है कि सिर्फ़ "ActivityManager" के साथ मैसेज को लॉग किया जाएगा और "MyApp" हैं दिखाया जाएगा. *:S का इस्तेमाल करने से यह पक्का होता है कि लॉग आउटपुट जिन्हें आपने साफ़ तौर पर तय किया है. *:S की मदद से आपके फ़िल्टर लॉग आउटपुट के लिए अनुमति वाली सूची.

    ध्यान दें: कुछ शेलों में, "*" वर्ण शेल द्वारा आरक्षित है. अगर आपको ऐसे शेल का इस्तेमाल कर रहे हैं, तो फ़िल्टर एक्सप्रेशन को कोट के अंदर रखें: adb logcat "ActivityManager:I MyApp:D *:S"

    यह फ़िल्टर एक्सप्रेशन, प्राथमिकता लेवल "चेतावनी" वाले सभी लॉग मैसेज दिखाता है और सभी टैग पर बेहतर:

    adb logcat *:W
    

    अगर आप अपने डेवलपमेंट कंप्यूटर से logcat को चला रहे हैं, न कि किसी रिमोट adb शेल है, तो आप एनवायरमेंट वैरिएबल ANDROID_LOG_TAGS:

    export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
    

    ANDROID_LOG_TAGS फ़िल्टर को एम्युलेटर/डिवाइस पर एक्सपोर्ट नहीं किया जाता उदाहरण के लिए, अगर logcat को रिमोट शेल से या adb shell logcat का इस्तेमाल किया जा रहा है.

    लॉग आउटपुट फ़ॉर्मैट को कंट्रोल करें

    लॉग मैसेज में टैग और प्राथमिकता के अलावा, कई मेटाडेटा फ़ील्ड भी होते हैं. आप मैसेज के आउटपुट फ़ॉर्मैट में बदलाव करें, ताकि वे एक खास मेटाडेटा फ़ील्ड दिखा सकें. ऐसा करने के लिए, -v विकल्प का इस्तेमाल करें और इन आउटपुट फ़ॉर्मैट में से कोई एक चुनें:

    • brief: जारी करने की प्रक्रिया की प्राथमिकता, टैग, और पीआईडी दिखाता है दिखाई देगा.
    • long: सभी मेटाडेटा फ़ील्ड और अलग-अलग मैसेज को खाली दिखाता है लाइन.
    • process: सिर्फ़ पीआईडी दिखाता है.
    • raw: यह किसी दूसरे मेटाडेटा फ़ील्ड के बिना, रॉ लॉग मैसेज दिखाता है.
    • tag: सिर्फ़ प्राथमिकता और टैग दिखाता है.
    • thread: पुराना फ़ॉर्मैट, जो मैसेज जारी कर रहा है.
    • threadtime (डिफ़ॉल्ट): तारीख, शुरू करने का समय, प्राथमिकता, टैग, PID, और TID शामिल हैं.
    • time: इवेंट शुरू करने का समय, प्राथमिकता, टैग, और पीआईडी जारी रखने की प्रोसेस शुरू कर दी है.

    logcat को शुरू करने पर, -v विकल्प:

    [adb] logcat [-v <format>]
    

    यहां एक उदाहरण दिया गया है, जिसमें thread आउटपुट में मैसेज जनरेट करने का तरीका बताया गया है फ़ॉर्मैट:

    adb logcat -v thread
    

    -v विकल्प के साथ, सिर्फ़ एक आउटपुट फ़ॉर्मैट चुना जा सकता है. हालांकि, आपको अपनी ज़रूरत के हिसाब से कई मॉडिफ़ायर तय कर सकते हैं. हालांकि, यह ज़रूरी है कि वे सही हों. logcat अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है ऐसे मॉडिफ़ायर पर ध्यान नहीं देता जिनका कोई मतलब नहीं है.

    फ़ॉर्मैट मॉडिफ़ायर

    फ़ॉर्मैट मॉडिफ़ायर logcat का आउटपुट बदल देते हैं. फ़ॉर्मैट मॉडिफ़ायर तय करने के लिए, -v विकल्प का इस्तेमाल इस तरह करें:

    adb logcat -b all -v color -d
    

    Android के हर लॉग मैसेज में एक टैग और उससे जुड़ी प्राथमिकता होती है. किसी भी फ़ॉर्मैट मॉडिफ़ायर को नीचे दिए गए फ़ॉर्मैट के किसी भी विकल्प के साथ जोड़ा जा सकता है:

    • brief
    • long
    • process
    • raw
    • tag
    • thread
    • threadtime
    • time

    नीचे दी गई कार्रवाई बदलने वाली कुंजी को फ़ॉर्मैट करने के लिए logcat -v --help को यहां डालें कमांड लाइन:

    • color: यह प्राथमिकता के हर लेवल को अलग रंग में दिखाता है.
    • descriptive: लॉग बफ़र इवेंट की जानकारी दिखाता है. यह मॉडिफ़ायर, इवेंट पर असर डालता है बफ़र मैसेज सिर्फ़ लॉग बफ़र करते हैं और इसका अन्य नॉन-बाइनरी बफ़र पर कोई असर नहीं पड़ता. इवेंट जानकारी, इवेंट लॉग टैग डेटाबेस से मिलती है.
    • epoch: 1 जनवरी, 1970 से शुरू होकर सेकंड में समय दिखाता है.
    • monotonic: पिछली बार चालू होने के बाद से, सीपीयू (CPU) सेकंड में समय दिखाता है.
    • printable: यह पक्का करता है कि बाइनरी लॉगिंग कॉन्टेंट को छोड़ दिया गया है.
    • uid: अगर ऐक्सेस कंट्रोल से अनुमति मिलती है, तो लॉग की गई प्रोसेस.
    • usec: माइक्रोसेकंड में सटीक समय के साथ समय दिखाता है.
    • UTC: समय को यूटीसी के तौर पर दिखाता है.
    • year: साल को, दिखाए गए समय में जोड़ता है.
    • zone: दिखाए गए समय में स्थानीय टाइम ज़ोन जोड़ता है.

    वैकल्पिक लॉग बफ़र देखें

    Android का लॉगिंग सिस्टम, लॉग मैसेज के लिए कई सर्कुलर बफ़र रखता है लॉग मैसेज डिफ़ॉल्ट सर्कुलर बफ़र में भेजे जाते हैं. अतिरिक्त लॉग मैसेज देखने के लिए, किसी विंडो को देखने का अनुरोध करने के लिए, -b विकल्प के साथ logcat कमांड को चलाएं वैकल्पिक सर्कुलर बफ़र. इनमें से किसी भी वैकल्पिक बफ़र को देखा जा सकता है:

    • radio: वह बफ़र दिखाता है जिसमें रेडियो/टेलीफ़ोनी से जुड़ा कॉन्टेंट होता है मैसेज.
    • events: इंटरप्रेटेड बाइनरी सिस्टम इवेंट बफ़र मैसेज को देखता है.
    • main: मुख्य लॉग बफ़र को देखता है (डिफ़ॉल्ट), जिसमें ये शामिल नहीं होते सिस्टम और क्रैश लॉग मैसेज दिखेंगे.
    • system: सिस्टम लॉग बफ़र (डिफ़ॉल्ट) देखता है.
    • crash: क्रैश लॉग बफ़र (डिफ़ॉल्ट) देखता है.
    • all: सभी बफ़र को देखता है.
    • default: रिपोर्ट main, system, और crash बफ़र.

    -b विकल्प का इस्तेमाल इस तरह किया जा सकता है:

    [adb] logcat [-b <buffer>]
    

    रेडियो और टेलीफ़ोनी मैसेज वाले लॉग बफ़र को देखने का तरीका यहां दिया गया है:

    adb logcat -b radio
    

    आप जितने भी बफ़र को प्रिंट करना चाहते हैं उनके लिए एक से ज़्यादा -b फ़्लैग तय करने के लिए, नीचे दी गई चीज़ें डालें:

    logcat -b main -b radio -b events
    

    बफ़र की कॉमा-सेपरेटेड लिस्ट के साथ एक -b फ़्लैग बताएं, उदाहरण के लिए:

    logcat -b main,radio,events
    

    कोड से लॉग करें

    Log क्लास आपको बनाने की सुविधा देती है लॉग एंट्री जो logcat टूल में दिखती हैं. डेटा लॉग करने के ये सामान्य तरीके हैं:

    उदाहरण के लिए, इस कॉल का इस्तेमाल करना:

    Kotlin

    Log.i("MyActivity", "MyClass.getView() — get item number $position")
    

    Java

    Log.i("MyActivity", "MyClass.getView() — get item number " + position);
    

    logcat से कुछ ऐसा मिलता है:

    I/MyActivity( 1557): MyClass.getView() — get item number 1