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
टूल में दिखती हैं. डेटा लॉग करने के ये सामान्य तरीके हैं:
Log.v(String, String)
(ज़्यादा शब्दों में जानकारी)Log.d(String, String)
(डीबग)Log.i(String, String)
(जानकारी)Log.w(String, String)
(चेतावनी)Log.e(String, String)
(गड़बड़ी)
उदाहरण के लिए, इस कॉल का इस्तेमाल करना:
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