Android
लॉगकट और लॉगकट का उपयोग करना
खोज…
वाक्य - विन्यास
-
Log.v(String tag, String msg, Throwable tr)
-
Log.v(String tag, String msg)
-
Log.d(String tag, String msg, Throwable tr)
-
Log.d(String tag, String msg)
-
Log.i(String tag, String msg, Throwable tr)
-
Log.i(String tag, String msg)
-
Log.w(String tag, String msg, Throwable tr)
-
Log.w(String tag, String msg)
-
Log.e(String tag, String msg, Throwable tr)
-
Log.e(String tag, String msg)
पैरामीटर
विकल्प | विवरण |
---|---|
-बी (बफर) | घटनाओं या रेडियो जैसे देखने के लिए एक वैकल्पिक लॉग बफर लोड करता है। मुख्य बफर डिफ़ॉल्ट रूप से उपयोग किया जाता है। वैकल्पिक लॉग बफ़र्स देखना देखें। |
-सी | संपूर्ण लॉग को साफ़ करता है (बाहर निकालता है)। |
-d | लॉग को स्क्रीन पर भेजता है और बाहर निकालता है। |
-f (फ़ाइल नाम) | लॉग संदेश आउटपुट (फ़ाइल नाम) को लिखता है। डिफ़ॉल्ट स्टडआउट है। |
जी | निर्दिष्ट लॉग बफर के आकार को प्रिंट करता है और बाहर निकलता है। |
-n (गिनती) | (गणना) घुमाए गए लॉग की अधिकतम संख्या सेट करता है। डिफ़ॉल्ट मान है 4. -r विकल्प की आवश्यकता है। |
-आर (किबिट्स) | आउटपुट के हर (kbytes) लॉग फ़ाइल को घुमाता है। डिफ़ॉल्ट मान 16 है। -f विकल्प की आवश्यकता है। |
-s | डिफ़ॉल्ट फ़िल्टर युक्ति को मौन पर सेट करता है। |
-v (प्रारूप) | लॉग संदेश के लिए आउटपुट स्वरूप सेट करता है। डिफ़ॉल्ट संक्षिप्त प्रारूप है। |
टिप्पणियों
परिभाषा
Logcat एक कमांड-लाइन टूल है जो सिस्टम मैसेज के लॉग को डंप करता है, जिसमें स्टैक के निशान भी शामिल होते हैं जब डिवाइस एक एरर और आपके द्वारा अपने ऐप से लिखे गए मैसेज को लॉग क्लास के साथ फेंक देता है।
कब इस्तेमाल करें
यदि आप एंड्रॉइड के लॉग तरीकों में से एक का उपयोग करने के बजाय कंसोल पर मुद्रण के लिए जावा के System.out तरीकों का उपयोग करने पर विचार कर रहे हैं, तो आपको पता होना चाहिए कि वे मूल रूप से एक ही काम करते हैं। हालांकि, जावा के तरीकों का उपयोग करने से बचना बेहतर है क्योंकि एंड्रॉइड के लॉग तरीकों द्वारा प्रदान की गई अतिरिक्त जानकारी और प्रारूपण अधिक फायदेमंद हैं। साथ ही, System.out प्रिंट विधियों को Log.i()
विधि पर पुनर्निर्देशित किया जाता है।
उपयोगी कड़ियाँ
- लॉग और logcat के लिए Android डेवलपर आधिकारिक दस्तावेज।
- Stackoveflow प्रश्न: Android Log.v (), Log.d (), Log.i (), Log.w (), Log.e () - हर एक का उपयोग कब करें?
लॉगकट आउटपुट को फ़िल्टर करना
यह लॉगकैट आउटपुट को फ़िल्टर करने के लिए सहायक है क्योंकि कई संदेश हैं जो रुचि के नहीं हैं। आउटपुट को फ़िल्टर करने के लिए, "एंड्रॉइड मॉनिटर" खोलें और शीर्ष-दाईं ओर ड्रॉप डाउन पर क्लिक करें और एडिट फ़िल्टर कॉन्फ़िगरेशन का चयन करें
अब आप संदेशों को दिखाने के लिए कस्टम फ़िल्टर जोड़ सकते हैं, जो रुचि के हैं, साथ ही साथ अच्छी तरह से ज्ञात लॉग लाइनों को फ़िल्टर करें जिन्हें सुरक्षित रूप से अनदेखा किया जा सकता है। आउटपुट के एक भाग को अनदेखा करने के लिए आप एक नियमित अभिव्यक्ति को परिभाषित कर सकते हैं। मिलान मिलानों को बाहर करने का एक उदाहरण इस प्रकार है:
^(?!(HideMe|AndThis))
यह इस उदाहरण का अनुसरण करके दर्ज किया जा सकता है:
उपरोक्त एक नियमित अभिव्यक्ति है जो इनपुट्स को बाहर करती है। यदि आप, काली सूची के लिए एक और टैग को जोड़ने के एक पाइप के बाद यह जोड़ना चाहते थे |
चरित्र। उदाहरण के लिए, यदि आप "GC" को ब्लैकलिस्ट करना चाहते हैं, तो आप इस तरह से एक फिल्टर का उपयोग करेंगे:
^(?!(HideMe|AndThis|GC))
अधिक प्रलेखन और उदाहरणों के लिए लॉगिंग पर जाएं और लॉगकट का उपयोग करें
लॉगिंग
कोई भी गुणवत्ता वाला Android एप्लिकेशन, एप्लिकेशन लॉग के माध्यम से क्या कर रहा है, इसका ट्रैक रखेगा। ये लॉग डेवलपर को एप्लिकेशन के साथ क्या हो रहा है, इसका निदान करने के लिए आसान डिबगिंग सहायता की अनुमति देता है। पूर्ण Android प्रलेखन यहाँ पाया जा सकता है , लेकिन एक सारांश इस प्रकार है:
बेसिक लॉगिंग
tag
और message
निर्दिष्ट करके Log
क्लास डेवलपर लॉग लिखने का मुख्य स्रोत है। टैग वह है जिसे आप लॉग संदेशों को फ़िल्टर करने के लिए उपयोग कर सकते हैं ताकि यह पता लगाया जा सके कि आपके विशेष गतिविधि से कौन सी लाइनें आती हैं। बस बुलाओ Log.v(String tag, String msg);
और एंड्रॉइड सिस्टम logcat को एक संदेश लिखेगा:
07-28 12:00:00.759 24812-24839/my.packagename V/MyAnimator: Some log messages
└ time stamp | app.package┘ | └ any tag |
process & thread ids ┘ log level┘ └ the log message
सुझाव:
प्रक्रिया आईडी और थ्रेड आईडी पर ध्यान दें। यदि वे समान हैं - लॉग मुख्य / UI थ्रेड से आ रहा है!
किसी भी टैग का उपयोग किया जा सकता है, लेकिन वर्ग नाम को टैग के रूप में उपयोग करना आम है:
public static final String tag = MyAnimator.class.getSimpleName();
लॉग स्तर
Android लकड़हारे के 6 अलग-अलग स्तर हैं, जिनमें से प्रत्येक एक निश्चित उद्देश्य की पूर्ति करता है:-
ERROR
:Log.e()
- गंभीर विफलता को इंगित करने के लिए उपयोग किया जाता है, यह एक
Exception
फेंकते समय मुद्रित स्तर है।
- गंभीर विफलता को इंगित करने के लिए उपयोग किया जाता है, यह एक
-
WARN
:Log.w()
- एक चेतावनी को इंगित करने के लिए उपयोग किया जाता है, मुख्य रूप से वसूली योग्य विफलताओं के लिए
-
INFO
:Log.i()
- आवेदन की स्थिति के बारे में उच्च-स्तरीय जानकारी को इंगित करने के लिए उपयोग किया जाता है
-
DEBUG
:Log.d()
- जानकारी लॉग करने के लिए उपयोग किया जाता है जो एप्लिकेशन को डीबग करते समय पता करने के लिए उपयोगी होगा, लेकिन एप्लिकेशन को चलाते समय रास्ते में मिल जाएगा
-
VERBOSE
:Log.v()
- जानकारी लॉग करने के लिए उपयोग किया जाता है जो एप्लिकेशन की स्थिति के बारे में छोटे विवरण को दर्शाता है
-
ASSERT
:Log.wtf()
- ऐसी स्थिति के बारे में जानकारी लॉग करने के लिए उपयोग किया जाता है जो कभी नहीं होनी चाहिए।
- wtf का अर्थ है "व्हाट ए टेरिबल फेल्योर"।
प्रवेश करने के लिए प्रेरणा
लॉगिंग के लिए प्रेरणा अनुप्रयोगों से घटनाओं की श्रृंखला में glancing द्वारा त्रुटियों, चेतावनियों और अन्य जानकारी को आसानी से ढूंढना है। उदाहरण के लिए, एक ऐसे एप्लिकेशन की कल्पना करें जो पाठ फ़ाइल से लाइनें पढ़ता है, लेकिन गलत तरीके से मानता है कि फ़ाइल कभी खाली नहीं होगी। लॉग ट्रेस (एक ऐप जो लॉग नहीं करता है) कुछ इस तरह दिखाई देगा:E/MyApplication: Process: com.example.myapplication, PID: 25788
com.example.SomeRandomException: Expected string, got 'null' instead
स्टैक ट्रेस के एक समूह द्वारा पीछा किया गया जो अंततः आक्रामक रेखा की ओर ले जाएगा, जहां एक डिबगर के साथ कदम रखने से अंततः समस्या पैदा होगी
हालाँकि, लॉगिंग सक्षम के साथ एक एप्लिकेशन का लॉग ट्रेस कुछ इस तरह दिख सकता है:
V/MyApplication: Looking for file myFile.txt on the SD card
D/MyApplication: Found file myFile.txt at path <path>
V/MyApplication: Opening file myFile.txt
D/MyApplication: Finished reading myFile.txt, found 0 lines
V/MyApplication: Closing file myFile.txt
...
E/MyApplication: Process: com.example.myapplication, PID: 25788
com.example.SomeRandomException: Expected string, got 'null' instead
लॉग पर एक त्वरित नज़र और यह स्पष्ट है कि फ़ाइल खाली थी।
लॉग इन करते समय ध्यान रखने योग्य बातें:
हालांकि लॉगिंग एक शक्तिशाली उपकरण है जो एंड्रॉइड डेवलपर्स को अपने एप्लिकेशन के आंतरिक कामकाज में अधिक से अधिक अंतर्दृष्टि प्राप्त करने की अनुमति देता है, लॉगिंग में कुछ कमियां हैं।लॉग पठनीयता:
एंड्रॉइड एप्लिकेशन के लिए कई लॉग्स को सिंक्रोनाइज़ करना आम बात है। जैसे, यह बहुत महत्वपूर्ण है कि प्रत्येक लॉग आसानी से पठनीय हो और उसमें केवल प्रासंगिक, आवश्यक जानकारी हो।प्रदर्शन:
लॉगिंग के लिए सिस्टम संसाधनों की थोड़ी मात्रा की आवश्यकता होती है। सामान्य तौर पर, यह चिंता का विषय नहीं है, हालांकि, अगर अति प्रयोग किया जाता है, तो लॉगजीआई से आवेदन के प्रदर्शन पर नकारात्मक प्रभाव पड़ सकता है।सुरक्षा:
हाल ही में, Google Play बाज़ार में कई Android एप्लिकेशन जोड़े गए हैं जो उपयोगकर्ता को सभी चलने वाले एप्लिकेशन के लॉग देखने की अनुमति देता है। डेटा का यह अनपेक्षित प्रदर्शन उपयोगकर्ताओं को गोपनीय जानकारी देखने की अनुमति दे सकता है। अंगूठे के एक नियम के रूप में, हमेशा अपने एप्लिकेशन को बाज़ार में प्रकाशित करने से पहले उन लॉग को हटा दें जिनमें गैर-सार्वजनिक डेटा हो।निष्कर्ष:
लॉगिंग एक Android एप्लिकेशन का एक अनिवार्य हिस्सा है, क्योंकि यह डेवलपर्स को शक्ति देता है। एक उपयोगी लॉग ट्रेस बनाने की क्षमता सॉफ्टवेयर विकास के सबसे चुनौतीपूर्ण पहलुओं में से एक है, लेकिन एंड्रॉइड का लॉग क्लास इसे बहुत आसान बनाने में मदद करता है।अधिक प्रलेखन और उदाहरणों के लिए लॉगिंग पर जाएं और लॉगकट का उपयोग करें
लॉगकट से सीधे स्रोत से लिंक के साथ लॉग इन करें
कोड के लिए लिंक जोड़ने के लिए यह एक अच्छी चाल है, इसलिए उस कोड पर कूदना आसान होगा जिसने लॉग जारी किया था।
निम्नलिखित कोड के साथ, यह कॉल:
MyLogger.logWithLink("MyTag","param="+param);
में परिणाम होगा:
07-26...012/com.myapp D/MyTag: MyFrag:onStart(param=3) (MyFrag.java:2366) // << logcat converts this to a link to source!
यह कोड है (MyLogger नामक एक वर्ग के अंदर):
static StringBuilder sb0 = new StringBuilder(); // reusable string object
public static void logWithLink(String TAG, Object param) {
StackTraceElement stack = Thread.currentThread().getStackTrace()[3];
sb0.setLength(0);
String c = stack.getFileName().substring(0, stack.getFileName().length() - 5); // removes the ".java"
sb0.append(c).append(":");
sb0.append(stack.getMethodName()).append('(');
if (param != null) {
sb0.append(param);
}
sb0.append(") ");
sb0.append(" (").append(stack.getFileName()).append(':').append(stack.getLineNumber()).append(')');
Log.d(TAG, sb0.toString());
}
यह एक मूल उदाहरण है, इसे आसानी से कॉल करने वाले के लिए एक लिंक जारी करने के लिए बढ़ाया जा सकता है (संकेत: स्टैक [3] के बजाय [4] होगा), और आप अन्य प्रासंगिक जानकारी भी जोड़ सकते हैं।
Logcat का उपयोग करना
Logcat एक कमांड-लाइन टूल है, जो सिस्टम मैसेज के एक लॉग को डंप करता है, जिसमें स्टैक के निशान शामिल होते हैं जब डिवाइस एक एरर फेंक देता है और ऐसे मैसेज जो आपने अपने ऐप से लॉग क्लास के साथ लिखे हैं।
Logcat आउटपुट एंड्रॉइड स्टूडियो के एंड्रॉइड मॉनिटर के भीतर या एडीबी कमांड लाइन के साथ प्रदर्शित किया जा सकता है।
Android स्टूडियो में
"Android मॉनिटर" आइकन पर क्लिक करके दिखाएं: या मैक पर विंडोज / लिनक्स या सीएमडी + 6 पर Alt + 6 दबाकर।
कमांड लाइन के माध्यम से:
सरल उपयोग:
$ adb logcat
टाइमस्टैम्प के साथ:
$ adb logcat -v time
विशिष्ट पाठ पर फ़िल्टर करें:
$ adb logcat -v time | grep 'searchtext'
यहाँ पर दस्तावेज़ित लाइन लॉगकैट के लिए कई विकल्प और फ़िल्टर उपलब्ध हैं ।
एक सरल लेकिन उपयोगी उदाहरण निम्नलिखित फ़िल्टर अभिव्यक्ति है जो सभी लॉग संदेशों को प्राथमिकता स्तर "त्रुटि" के साथ सभी टैग पर प्रदर्शित करता है:
$ adb logcat *:E
लॉगिंग कोड जनरेट करना
Android Studio
के Live templates
त्वरित लॉगिंग के लिए काफी कुछ शॉर्टकट पेश कर सकते हैं।
लाइव टेम्प्लेट का उपयोग करने के लिए, आपको बस इतना करना है कि आप टेम्प्लेट का नाम लिखना शुरू करें, और स्टेटमेंट डालने के लिए TAB
या हिट करें।
उदाहरण:
-
logi
→ में बदल जाता है →android.util.Log.i(TAG, "$METHOD_NAME$: $content$");
-
$METHOD_NAME$
को स्वचालित रूप से आपके विधि नाम से बदल दिया जाएगा, और कर्सर सामग्री के भरे जाने की प्रतीक्षा करेगा।
-
-
loge
→ वही, त्रुटि के लिए - शेष लॉगिंग स्तरों के लिए आदि।
टेम्प्लेट की पूरी सूची Android Studio
की सेटिंग्स ( ALT + s और टाइप "लाइव") में देखी जा सकती है। और अपने कस्टम टेम्पलेट को भी जोड़ना संभव है।
यदि आपको Android Studio
का Live templates
आपकी ज़रूरतों के लिए पर्याप्त नहीं लगता है, तो आप एंड्रॉइड पोस्टफ़िक्स प्लगिन पर विचार कर सकते हैं
यह एक बहुत ही उपयोगी पुस्तकालय है जो आपको लॉगिंग लाइन को मैन्युअल रूप से लिखने से बचने में मदद करता है।
वाक्य रचना बिल्कुल सरल है:
.log - लॉगिंग यदि लगातार चर "TAG" है, तो यह "TAG" का उपयोग करता है। इसके अलावा यह क्लास नाम का उपयोग करता है।
Android स्टूडियो उपयोग
लॉग साफ़ करें
पूरा लॉग साफ़ करने के लिए (फ्लश):
adb logcat -c