मुझे एंड्रॉइड डिवाइस से लॉगफाइल कैसे मिलेगा?


129

मैं डिवाइस से लॉग फ़ाइल को अपने पीसी पर खींचना चाहूंगा। मैं उसे कैसे कर सकता हूँ?

जवाबों:


112

Logcollector एक अच्छा विकल्प है लेकिन आपको इसे पहले इंस्टॉल करना होगा।

जब मैं मेल द्वारा भेजने के लिए लॉगफ़ाइल प्राप्त करना चाहता हूं, तो मैं आमतौर पर निम्नलिखित कार्य करता हूं:


यह कमांडलाइन मेरे लिए काम नहीं करता है, मुझे यह आउटपुट मिलता है। logcat read: अमान्य तर्क
neoneye

5
ध्यान दें कि logcollector 4.1 से ऊपर के एंड्रॉइड के संस्करणों के लिए काम नहीं करता है क्योंकि अनुप्रयोगों को अब केवल अपने लॉग प्रविष्टियों को पढ़ने की अनुमति है। ( group.google.com/forum/# ​​.topic/android-log-collector/… )
मैथ्यू लोव

11
क्या कोई सरल विधि नहीं है, किसी भी तरह डिवाइस से लॉगफ़ाइल को खींचने के लिए एक बार यूएसबी के माध्यम से बाहरी भंडारण उपकरण के रूप में जुड़ा हुआ है, बिना अदब या कुछ भी स्थापित करने की आवश्यकता के बिना ?
या मैपर

सुनिश्चित करें कि आप चलाने के लिए सही निर्देशिका में हैं adb। आमतौर परC:\Users\[your username]\AppData\Local\Android\Sdk\platform-tools\
lolololol ol

30

मुझे उम्मीद है कि यह कोड किसी की मदद करेगा। डिवाइस से लॉग इन करने के लिए मुझे यह पता लगाने में 2 दिन लग गए, और फिर इसे फ़िल्टर करें:

public File extractLogToFileAndWeb(){
        //set a file
        Date datum = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.ITALY);
        String fullName = df.format(datum)+"appLog.log";
        File file = new File (Environment.getExternalStorageDirectory(), fullName);

        //clears a file
        if(file.exists()){
            file.delete();
        }


        //write log to file
        int pid = android.os.Process.myPid();
        try {
            String command = String.format("logcat -d -v threadtime *:*");        
            Process process = Runtime.getRuntime().exec(command);

            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            StringBuilder result = new StringBuilder();
            String currentLine = null;

            while ((currentLine = reader.readLine()) != null) {
                   if (currentLine != null && currentLine.contains(String.valueOf(pid))) {
                       result.append(currentLine);
                       result.append("\n");
                    }
            }

            FileWriter out = new FileWriter(file);
            out.write(result.toString());
            out.close();

            //Runtime.getRuntime().exec("logcat -d -v time -f "+file.getAbsolutePath());
        } catch (IOException e) {
            Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
        }


        //clear the log
        try {
            Runtime.getRuntime().exec("logcat -c");
        } catch (IOException e) {
            Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
        }

        return file;
    }

@mehdok द्वारा बताया गया

लॉग पढ़ने के लिए प्रकट करने की अनुमति जोड़ें

<uses-permission android:name="android.permission.READ_LOGS" />

1
यह ठीक काम करता है, लेकिन आपकी ज़रूरत के हर उपकरण पर काम करने के लिए<uses-permission android:name="android.permission.READ_LOGS" />
mehdok

27

मैं इस तरह के कुछ का उपयोग करेगा:

$adb logcat -d > logcat.txt

-D विकल्प पूरे सर्कुलर बफर को टेक्स्ट फाइल में डंप करता है और यदि आप किसी विशेष एक्शन / इरादे की कोशिश कर रहे हैं

$adb logcat -d | grep 'com.whatever.you.are.looking.for' -B 100 -A 100 > shorterlog.txt

उम्मीद है की यह मदद करेगा :)


13

उन लोगों के लिए जो यूएसबी डिबगिंग में रुचि नहीं रखते हैं या adbएक आसान उपाय है। Android 6 में (पूर्व संस्करण के बारे में निश्चित नहीं) डेवलपर टूल के तहत एक विकल्प है: टेक बग रिपोर्ट

इस विकल्प पर क्लिक करने से एक बग रिपोर्ट तैयार होगी और आपको इसे ड्राइव करने या ईमेल में भेजने के लिए सहेजने का संकेत मिलेगा।

मुझे यह लॉग्स प्राप्त करने का सबसे आसान तरीका लगता है। मुझे USB डीबगिंग चालू करना पसंद नहीं है।


1
ठीक वही जो मेरे द्वारा खोजा जा रहा था!
यमिल

1
मैं इसे बिल्कुल कहाँ ढूँढता हूँ?
गुरबग्गी

11

संपादित करें:

आंतरिक लॉग स्मृति में एक परिपत्र बफर है। प्रत्येक के लिए वास्तव में कुछ ऐसे परिपत्र बफ़र हैं: रेडियो, ईवेंट, मुख्य। डिफ़ॉल्ट मुख्य है।

बफर की एक प्रति प्राप्त करने के लिए, एक तकनीक में डिवाइस पर एक कमांड निष्पादित करना और एक स्ट्रिंग चर के रूप में आउटपुट प्राप्त करना शामिल है।

SendLog एक ओपन सोर्स ऐप है जो सिर्फ यही करता है: http://www.l6n.org/android/sendlog.shtml

कुंजी logcatएम्बेडेड ओएस में डिवाइस पर चलाने के लिए है। यह उतना मुश्किल नहीं है जितना लगता है, बस लिंक में ओपन सोर्स ऐप देखें।


यह आउटपुट को स्क्रीन पर डंप करता है, मुझे इसे एक फ़ाइल में चाहिए।
पेंटियम

आप लॉग भेज सकते हैं aLogCat के साथ। या केवल
डीडीएमएस

@ मोलनारम ने कहा कि मेरा जवाब थोड़ा-सा इंजीनियर था, अगर उसके लिए उसे बस इतना ही करना होता =)
ब्रैड हेन

@BradHein आपने कहा कि SendLog खुला स्रोत था लेकिन मुझे स्रोत कोड नहीं मिल रहा है। किसी भी विचार यह कहाँ है?
smith324

8

अक्सर मुझे त्रुटि मिलती है " logcat read: Invalid argument"। लॉग से पढ़ने से पहले मुझे लॉग को साफ़ करना था।

मुझे यह पसंद है:

prompt> cd ~/Desktop
prompt> adb logcat -c
prompt> adb logcat | tee log.txt

धन्यवाद! मैं एक लंबे समय के लिए उस त्रुटि को कर रहा था, उस logcat -c ने इसे तुरंत ठीक कर दिया!
जॉर्डन

4

एक सरल तरीका यह है कि आप अपने लॉग कलेक्टर तरीके या यहां तक ​​कि बाजार से केवल एक मौजूदा लॉग कलेक्टर ऐप बना सकते हैं।

अपने ऐप्स के लिए मैंने एक रिपोर्ट कार्यक्षमता बनाई जो लॉग को मेरे ईमेल (या यहां तक ​​कि किसी अन्य स्थान पर भेजती है - एक बार जब आप लॉग प्राप्त कर लेते हैं तो आप यह कर सकते हैं कि आप इसके साथ चाहते हैं)।

डिवाइस से लॉग फ़ाइल कैसे प्राप्त करें, इस बारे में एक सरल उदाहरण है:


3

अपने टर्मिनल पर आउटपुट प्राप्त करने के लिए सिंपल बस निम्न कमांड चलाएं:

adb shell logcat

3

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मेरा मानना ​​है कि 2018 में भी मान्य है।

हर Android डिवाइस में डेवलपर विकल्पों में छिपी बग रिपोर्ट लेने का विकल्प होता है।

नोट: यह संपूर्ण सिस्टम लॉग को डंप करेगा

डेवलपर विकल्प कैसे सक्षम करें? देखें: https://developer.android.com/studio/debug/dev-options

मेरे लिए क्या काम करता है:

  1. अपने डिवाइस को पुनरारंभ करें (विश्लेषण के लिए डेवलपर के लिए न्यूनतम कचरा लॉग बनाने के लिए)
  2. अपने बग को पुन: उत्पन्न करें
  3. सेटिंग्स पर जाएं -> डेवलपर विकल्प -> बग रिपोर्ट लें
  4. लॉग को इकट्ठा करने के लिए एंड्रॉइड सिस्टम की प्रतीक्षा करें (अधिसूचना में प्रगति पट्टी देखें)
  5. एक बार जब यह पूरा हो जाता है, तो इसे साझा करने के लिए अधिसूचना पर टैप करें (आप जीमेल या घर का उपयोग कर सकते हैं)

इसे कैसे पढ़ें? खुला बग्रेपोर्ट-1960-01-01-hh-mm-ss.txt

आप शायद कुछ इस तरह देखना चाहते हैं:

------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of crash
06-13 14:37:36.542 19294 19294 E AndroidRuntime: FATAL EXCEPTION: main

या:

------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of main

2

User1354692 के लिए धन्यवाद मैं इसे और अधिक आसान बना सकता था, केवल एक लाइन के साथ! उन्होंने जो टिप्पणी की है:

try {
    File file = new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()));
    Runtime.getRuntime().exec("logcat -d -v time -f " + file.getAbsolutePath());}catch (IOException e){}

यह कोड डालने के लिए सबसे अच्छी जगह कहां है? में OnCreate?
यंगजई

2

मैंने ईमेल द्वारा लॉग को पुनः प्राप्त करने के लिए एक छोटा पुस्तकालय (.AR) बनाया है। आप इसका उपयोग जीमेल खातों के साथ कर सकते हैं। यह बहुत आसान है लेकिन काम करता है। आप यहाँ से एक प्रति प्राप्त कर सकते हैं

साइट स्पैनिश में है, लेकिन उत्पाद विवरण के अंग्रेजी संस्करण के साथ एक पीडीएफ है।

मुझे उम्मीद है कि यह मदद कर सकता है।


2

दो चरण:

  • लॉग जनरेट करें
  • लॉग भेजने के लिए जीमेल लोड करें

  1. लॉग जनरेट करें

    File generateLog() {
        File logFolder = new File(Environment.getExternalStorageDirectory(), "MyFolder");
        if (!logFolder.exists()) {
            logFolder.mkdir();
        }
        String filename = "myapp_log_" + new Date().getTime() + ".log";
    
        File logFile = new File(logFolder, filename);
    
        try {
            String[] cmd = new String[] { "logcat", "-f", logFile.getAbsolutePath(), "-v", "time", "ActivityManager:W", "myapp:D" };
            Runtime.getRuntime().exec(cmd);
            Toaster.shortDebug("Log generated to: " + filename);
            return logFile;
        }
        catch (IOException ioEx) {
            ioEx.printStackTrace();
        }
    
        return null;
    }
  2. लॉग भेजने के लिए जीमेल लोड करें

    File logFile = generateLog();
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(logFile));
    intent.setType("multipart/");
    startActivity(intent);

# 1 के लिए संदर्भ

~~

# 2 के लिए - लॉग फ़ाइल को देखने और भेजने के लिए कैसे लोड करने के लिए कई अलग-अलग उत्तर हैं। अंत में, यहाँ समाधान वास्तव में दोनों के लिए काम किया:

  • एक विकल्प के रूप में जीमेल लोड करें
  • फ़ाइल को सफलतापूर्वक संलग्न करता है

सही ढंग से काम करने के जवाब के लिए https://stackoverflow.com/a/22367055/2162226 पर बड़ा धन्यवाद


0

पहले सुनिश्चित करें कि एडीबी कमांड पीटीएच को एंड्रॉइड एसडीके प्लेटफॉर्म-टूल्स पर सेट करके निष्पादन योग्य है:

export PATH=/Users/espireinfolabs/Desktop/soft/android-sdk-mac_x86/platform-tools:$PATH

फिर भागो:

adb shell logcat > log.txt

या सबसे पहले adb प्लेटफ़ॉर्म-टूल्स पर जाएँ:

cd /Users/user/Android/Tools/android-sdk-macosx/platform-tools 

फिर भागो

./adb shell logcat > log.txt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.