Logcat एक Android SDK टूल है जो रीयल टाइम में सिस्टम संदेशों और एप्लिकेशन लॉग को देखने के लिए है, जो ADB या Android Studio के बिल्ट-इन कंसोल के माध्यम से उपलब्ध है। Android Developers के अनुसार, Logcat सिस्टम के सभी प्रक्रियाओं से संदेश एकत्र करता है, उन्हें महत्व स्तरों और टैग द्वारा फ़िल्टर करता है, और डेवलपर को त्रुटियों का निदान करने, कोड निष्पादन को ट्रैक करने और प्रदर्शन का विश्लेषण करने की अनुमति देता है। Logcat Android एप्लिकेशन को डीबग करते समय जानकारी का प्राथमिक स्रोत है।
मुख्य बातें
Logcat एक Android सिस्टम बफ़र है जिसमें सभी प्रक्रियाएँ (Linux कर्नेल, system_server और एप्लिकेशन सहित) एक विशिष्ट प्रारूप में संदेश लिखती हैं। logcat टूल, जो Android SDK में शामिल है, इस बफ़र को पढ़ता है और रीयल टाइम में संदेश प्रदर्शित करता है। Android 4.1 (API 16) से शुरू होकर, Logcat तक पहुँच प्रतिबंधित है: एप्लिकेशन केवल अपने स्वयं के लॉग पढ़ सकते हैं, और सिस्टम लॉग डीबग एक्सेस के साथ ADB के माध्यम से सुलभ हैं।
प्रत्येक Logcat संदेश में पाँच फ़ील्ड होते हैं: दिनांक और समय, PID (प्रक्रिया पहचानकर्ता), TID (थ्रेड पहचानकर्ता), लॉग स्तर और टैग। प्रारूप स्थिर है और सभी Android संस्करणों में समान है। यह IDE पर निर्भरता के बिना CI/CD पाइपलाइनों में लॉग फ़िल्टरिंग के लिए grep, awk और sed उपयोगिताओं का उपयोग करने की अनुमति देता है।
लॉग एक निश्चित आकार के रिंग बफ़र में संग्रहीत होते हैं: main के लिए 256 KB, system के लिए 256 KB और events के लिए 256 KB (Android 5+)। बफ़र के ओवरफ़्लो होने पर पुराने संदेश हटा दिए जाते हैं। डेवलपर PROP logcat.size प्रॉपर्टी या डिवाइस के डेवलपर विकल्पों में बफ़र का आकार बदल सकता है।
छह स्तर लॉगिंग के संदेश के महत्व को निर्धारित करते हैं। Android अन्य प्लेटफ़ॉर्म के समान मानक स्तरों का उपयोग करता है लेकिन Log वर्ग में अपने स्वयं के स्थिरांक नामों के साथ। सही स्तर चुनना कुशलतापूर्वक लॉग फ़िल्टर करने और महत्वपूर्ण संदेशों को गौण संदेशों में डूबने से बचाने में मदद करता है।
| स्तर | स्थिरांक | उद्देश्य | डिफ़ॉल्ट रूप से दिखाया गया |
|---|---|---|---|
| VERBOSE | Log.v | अत्यधिक विस्तृत डीबग जानकारी | नहीं |
| DEBUG | Log.d | डेवलपर के लिए डीबग संदेश | नहीं |
| INFO | Log.i | एप्लिकेशन संचालन के बारे में सूचनात्मक संदेश | हाँ |
| WARN | Log.w | संभावित समस्याओं के बारे में चेतावनी | हाँ |
| ERROR | Log.e | गंभीर त्रुटियाँ और अपवाद | हाँ |
| ASSERT | Log.wtf | त्रुटियाँ जो सिद्धांत रूप में नहीं होनी चाहिए | हाँ |
टैग (tag) — 23 वर्णों तक की एक स्ट्रिंग जो संदेश के स्रोत की पहचान करती है। टैग के रूप में क्लास या मॉड्यूल नाम का उपयोग करने की अनुशंसा की जाती है: MainActivity, AuthManager, NetworkModule। यह एप्लिकेशन के किसी विशिष्ट घटक द्वारा लॉग फ़िल्टर करने की अनुमति देता है। टीम में एकरूपता के लिए, आप एक अलग फ़ाइल में टैग स्थिरांक बना सकते हैं या Timber लाइब्रेरी का उपयोग कर सकते हैं, जो क्लास नाम के आधार पर स्वचालित रूप से टैग सम्मिलित करती है।
जब एक अनहैंडल्ड अपवाद होता है, Android स्वचालित रूप से Logcat में क्लास, विधि, कोड लाइन और कॉल श्रृंखला को इंगित करते हुए पूर्ण स्टैक ट्रेस लिखता है। क्रैश लॉग में अपवाद प्रकार (NullPointerException, RuntimeException), संदेश और क्रैश बिंदु से एप्लिकेशन के एंट्री पॉइंट तक कॉल अनुक्रम होता है। उपयोगकर्ताओं के उपकरणों से क्रैश लॉग का विश्लेषण करने के लिए Firebase Crashlytics का उपयोग किया जाता है, जो ऑबफ़स्केशन मैप (Android के लिए mapping.txt) के साथ स्टैक ट्रेस को सिंक्रनाइज़ करता है।
Android Studio View → Tool Windows → Logcat (Alt + 6) के माध्यम से सुलभ एक ग्राफिकल Logcat इंटरफ़ेस प्रदान करता है। Logcat विंडो रीयल टाइम में अपडेट होती है, कनेक्टेड डिवाइस के सभी संदेश दिखाती है और सामान्य स्ट्रीम से वांछित जानकारी को अलग करने के लिए लचीले फ़िल्टर कॉन्फ़िगर करने की अनुमति देती है।
Log Level ड्रॉपडाउन न्यूनतम स्तर द्वारा संदेशों को फ़िल्टर करता है: केवल चेतावनी और त्रुटियाँ देखने के लिए WARN चुनें, VERBOSE, DEBUG और INFO को छिपाते हुए। खोज फ़ील्ड संदेश टेक्स्ट या टैग द्वारा खोजने की अनुमति देता है — regex समर्थित है, जो पैटर्न द्वारा संदेश खोजने के लिए सुविधाजनक है।
Saved Filters — Android Studio में Logcat की एक शक्तिशाली सुविधा। आप एक फ़िल्टर बना सकते हैं जो केवल आपके एप्लिकेशन के टैग (tag:MyApp) और WARN+ स्तर वाले संदेश दिखाता है। फ़िल्टर सत्रों के बीच सहेजे जाते हैं और ड्रॉपडाउन सूची से उपलब्ध होते हैं। कई मॉड्यूल वाली परियोजनाओं के लिए, प्रत्येक मॉड्यूल के लिए एक अलग फ़िल्टर बनाएँ।
# एप्लिकेशन लॉग को फ़िल्टर करने के लिए उदाहरण अभिव्यक्ति
tag:"MyApp" level:WARN # केवल MyApp के लिए WARN+
package:"com.mycompany" # पैकेज के सभी लॉग
-tag:"okhttp" # OkHttp लॉग को बाहर करें
Logcat लॉग को Save to File आइकन के माध्यम से टेक्स्ट फ़ाइल में निर्यात किया जा सकता है। यह Jira में टिकट से जोड़ने या लंबे सत्रों का विश्लेषण करने के लिए उपयोगी है। निर्यातित लॉग को किसी भी टेक्स्ट एडिटर में खोला जा सकता है और पैटर्न खोजने के लिए grep लागू किया जा सकता है। फ़ॉर्मेटेड देखने के लिए, logcat-color उपयोगिता का उपयोग करें।
ADB logcat — Logcat का कंसोल संस्करण, जो Android Debug Bridge के माध्यम से सुलभ है। इसका मुख्य लाभ CI सर्वरों, ऑटोमेशन स्क्रिप्ट और बिना Android Studio के उपकरणों पर चलाने की क्षमता है। ADB logcat GUI के समान सभी फ़िल्टर का समर्थन करता है, लेकिन कमांड लाइन लचीलेपन के साथ।
adb logcat कमांड बिना तर्कों के रीयल टाइम में पूरे बफ़र को आउटपुट करता है। रोकने के लिए Ctrl+C का उपयोग करें। -c फ़्लैग रिकॉर्डिंग शुरू करने से पहले बफ़र को साफ़ करता है — यह तब सुविधाजनक होता है जब आपको वर्तमान परीक्षण के लॉग को पिछले संदेशों से अलग करने की आवश्यकता होती है। -b फ़्लैग बफ़र प्रकार चुनता है: main, system, events, crash (Android 12+).
# बफ़र साफ़ करें और MyApp टैग के साथ लॉग रिकॉर्डिंग शुरू करें
adb logcat -c
adb logcat MyApp:D *:S
# लॉग को फ़ाइल में सहेजें
adb logcat -d > logcat_dump.txt
# प्रक्रिया PID द्वारा फ़िल्टरिंग
adb logcat --pid=12345
ADB का Unix उपयोगिताओं के साथ संयोजन अधिकतम लचीलापन देता है। उदाहरण के लिए, फ़िल्टर "*:S TAG:D" केवल TAG टैग वाले DEBUG स्तर और उससे ऊपर के संदेश दिखाता है, बाकी सभी को छिपाता है। केवल अपवाद देखने के लिए grep -i exception का उपयोग करें। त्रुटि आवृत्ति का विश्लेषण करने के लिए, टैग कॉलम पर sort | uniq -c लागू करें।
CI सर्वरों पर, Logcat का उपयोग UI परीक्षण चलाने के दौरान डायग्नोस्टिक्स एकत्र करने के लिए किया जाता है। विशिष्ट पाइपलाइन: परीक्षण चलाने से पहले बफ़र साफ़ किया जाता है, परीक्षण निष्पादन के बाद लॉग डंप बिल्ड आर्टिफैक्ट के रूप में सहेजा जाता है। यदि परीक्षण विफल होता है, तो लॉग यह निर्धारित कर सकते हैं कि विफलता ANR, अनहैंडल्ड अपवाद या नेटवर्क टाइमआउट के कारण हुई थी या नहीं।
android.util.Log क्लास — Logcat में संदेश लिखने के लिए बिल्ट-इन API है। Log.v, Log.d, Log.i, Log.w, Log.e और Log.wtf एक टैग (स्ट्रिंग) और संदेश (स्ट्रिंग) या संदेश + Throwable स्वीकार करते हैं। संदेशों को फ़ॉर्मेट करने के लिए String.format या Kotlin String templates का उपयोग करें — स्ट्रिंग कॉन्केटनेशन से बचें, जो heap में अनावश्यक ऑब्जेक्ट बनाता है।
Timber — Jake Wharton की एक लोकप्रिय लाइब्रेरी है जो बिल्ट-इन Log API की कमियों को दूर करती है। Timber स्वचालित रूप से उस क्लास के नाम के आधार पर टैग सम्मिलित करता है जिसने लॉगिंग को कॉल किया और प्रत्येक कॉल में टैग पास करने की आवश्यकता नहीं होती है। Timber सशर्त लॉगिंग का भी समर्थन करता है: Release बिल्ड में, Application.onCreate में एक पंक्ति से Timber.v और Timber.d कॉल को अक्षम किया जा सकता है।
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// बिल्ट-इन Log API
Log.d("MainActivity", "onCreate called")
// Timber — क्लास नाम से स्वचालित टैग
Timber.d("onCreate called")
}
private fun loadData() {
try {
val result = fetchFromNetwork()
Timber.i("Data loaded: $result")
} catch (e: IOException) {
Timber.e(e, "Failed to load data")
}
}
}
Release बिल्ड में Logcat बफ़र पर लोड कम करने और संवेदनशील जानकारी के रिसाव को रोकने के लिए VERBOSE और DEBUG लॉग को अक्षम करने की अनुशंसा की जाती है। Timber PlantingTree के माध्यम से इस समस्या को हल करता है: Debug फ्लेवर में DebugTree लगाया जाता है (सब कुछ लॉग करता है), Release में — CrashReportingTree (केवल Crashlytics के माध्यम से ERROR लॉग करता है)। बिल्ट-इन Log API सशर्त लॉगिंग का समर्थन नहीं करता है — डेवलपर को प्रत्येक कॉल को if (BuildConfig.DEBUG) से लपेटना होता है।
अक्सर पूछे जाने वाले प्रश्न
परीक्षण चलाने से पहले adb logcat -c कमांड का उपयोग करें। वैकल्पिक रूप से, Android Studio में Logcat विंडो में Clear Logcat बटन (कचरा) दबाएँ। सफ़ाई अन्य प्रक्रियाओं के सिस्टम बफ़र को प्रभावित नहीं करती, केवल वर्तमान कनेक्शन को प्रभावित करती है।
बफ़र को 2 MB तक बढ़ाने के लिए adb logcat -G 2M निष्पादित करें। अधिकतम आकार डिवाइस पर निर्भर करता है: Android 10+ पर 16 MB तक उपलब्ध है। परिवर्तन डिवाइस के रिबूट होने तक बना रहता है। स्थायी सेटिंग के लिए, device tree में build.prop का उपयोग करें।
संभावित कारण: एप्लिकेशन Release मोड में चल रहा है (Timber.v/d लॉग अक्षम हैं), Logcat फ़िल्टर आवश्यक स्तर छिपा रहा है, या आप गलत डिवाइस से कनेक्ट हैं। यह भी जाँचें कि आपने Android Studio में एप्लिकेशन की प्रक्रिया चुनी है, system_process नहीं।
FATAL EXCEPTION वाली पंक्ति खोजें, जिसके नीचे पूरा स्टैक ट्रेस होता है। पहली पंक्ति में अपवाद प्रकार और संदेश होता है, बाद की पंक्तियों में फ़ाइल और कोड लाइन के साथ कॉल श्रृंखला होती है। सभी लॉग के बीच त्वरित खोज के लिए grep "FATAL EXCEPTION" का उपयोग करें।
ANR (Application Not Responding) — एक स्थिति जहाँ मुख्य थ्रेड (UI thread) 5 सेकंड से अधिक समय तक ब्लॉक रहता है। Logcat में, ANR ActivityManager टैग और "ANR in ..." टेक्स्ट वाले संदेश के रूप में दिखाई देता है जिसमें सभी थ्रेड का स्टैक ट्रेस संलग्न होता है। टैग:ActivityManager level:ERROR फ़िल्टर का उपयोग करें।
निष्कर्ष
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें