2010-05-17 9 views
17

पर भेजें, अब हम कुछ दोस्तों के साथ हमारे आवेदन का परीक्षण कर रहे हैं। कभी-कभी कुछ त्रुटियां होती हैं जो अपवाद नहीं फेंकती हैं। तो मुझे सच में नहीं पता कि समस्या क्या थी। इसलिए मैंने सोचा कि मेनू आइटम को लागू करना एक अच्छा विचार होगा जो लॉग-आउट आउटपुट को ई-मेल पते पर भेजने की अनुमति देता है, ताकि हम लॉग की जांच कर सकें।किसी ऐप के लॉगैक आउटपुट को ईमेलएड्रेस

दुर्भाग्यवश मुझे इंटरनेट से संकेत नहीं मिला कि फोन से लॉगकैट निकालने का तरीका कैसे है। ईमेल कैसे भेजें, समस्या नहीं होनी चाहिए।

उत्तर

13

android-log-collector पर देखो, जैसा कि आप ऐसा करने की कोशिश कर रहे हैं।

एंड्रॉइड 4.1 के रूप में मनमाने ढंग से लॉगकैट डेटा एकत्र करना संभव नहीं है। ऐसा करने का कोई दस्तावेज और समर्थित तरीका कभी नहीं था, और अनियंत्रित/असमर्थित तरीका was locked down in Jelly Bean। अपने स्वयं के दुर्घटनाओं के लिए, आप ACRA जैसे क्रैश लॉगिंग लाइब्रेरी का उपयोग करके बेहतर सेवा प्रदान करते हैं।

+0

हम्म धन्यवाद। तो मुझे अपने प्रोजेक्ट में स्रोत जोड़ना होगा या ऐप को फोन पर इंस्टॉल करना होगा। सही? – RoflcoptrException

+0

आपको उनसे पूछना होगा, क्योंकि मैंने उनकी सामग्री का उपयोग नहीं किया है। कम से कम, आप उनके स्रोत कोड को देख सकते हैं कि वे लॉग कैसे पढ़ते हैं। – CommonsWare

+0

हम्म हां मैंने पृष्ठ पर पढ़ा है कि डेवलपर इसका उपयोग कर सकते हैं, लेकिन हालांकि कोई दस्तावेज नहीं है और मुझे नहीं पता कि इसे कैसे शुरू किया जाए। लेकिन धन्यवाद – RoflcoptrException

7

मैं फ्लुरी (flurry.com) में भी देखता हूं जो आपको केवल सामान्य विश्लेषण नहीं देता है बल्कि आपको मनमानी जानकारी लॉग इन करने देता है और आपके लिए अपरिचित अपवाद भी लॉग करता है। मैंने इसे सचमुच 5 मिनट में स्थापित किया है, लेकिन ध्यान में रखना एक बात यह है कि यह ईमेल अलर्ट की तरह वास्तविक समय नहीं है। आपको अपने डैशबोर्ड पर दिखाने के लिए अपने ऐप में लॉग इन करने के लिए कुछ घंटों का इंतजार करना होगा। यदि आपके पास वास्तव में हल्का ऐप है, तो यह भी अधिक हो सकता है, लेकिन मैंने सेवा का उपयोग करने के परिणामस्वरूप मेरे ऐप में कोई प्रदर्शन हानि नहीं देखी है। आप 2 को

0

धन्यवाद लेकिन android-लॉग-कलेक्टर मंच ब्राउज़ कर मैं एक solution है कि यहां तक ​​कि संभाल करने के लिए आसान पाया:

वहाँ आप अपने सर्वर पर कहीं न कहीं एक php फ़ाइल स्टोर कर सकते हैं (या आप न अगर चाहते हैं अपने सर्वर का उपयोग करने के लिए, उनके पास उनके सर्वर पर एक स्क्रिप्ट भी है)। इस PHP फ़ाइल में आप परिभाषित कर सकते हैं कि पोस्ट संदेश सर्वर तक पहुंचने पर क्या किया जाएगा। मैंने बस एक बहुत ही सरल कोड को परिभाषित किया जो मेरे मेल पते पर डेटा को आगे बढ़ाता है।

यह केवल तभी काम करता है जब एक अपवाद अपवाद फेंक दिया गया हो। लेकिन कोई डिफ़ॉल्ट अपूर्ण अपवाद हैंडलर का विस्तार कर सकता है, ताकि न केवल स्टैकट्रैक बल्कि लॉगकैट भी प्राप्त हो सके।

+1

यह लिंक टूटा हुआ है, क्या आप इसे अपडेट कर सकते हैं या कुछ सोर्स कोड पोस्ट कर सकते हैं? – gobernador

+0

हां यह टूटा हुआ है, और मुझे एक नया नहीं मिल रहा है। लेकिन जैसा कि आपने देखा होगा कि जवाब लगभग 2 साल पुराना है। –

+0

यह एक पुराना लिंक है। मैं शोध कर रहा था और इस काम को करने की कोशिश कर रहा था, और मैं बस सोच रहा था कि क्या आपको पता था कि यह कहां है। कोई फर्क नहीं पड़ता, मैं एक और जवाब कोशिश करूंगा। – gobernador

3

मैं निश्चित रूप से इस परियोजना here

6

मैं बहुत उपयोगी वास्तव में LogCollector पाया (CommonsWare से टिप) पर भी ध्यान देने की सलाह देते हैं:

और भूल नहीं है अपने खुद के आवेदन में स्थापित करने के लिए:

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

LogCollector कुछ कचरे को लॉग इन करता है, न कि मेरे ऐप के लॉग। कोई भी लाइन नहीं – djdance

+1

LogCollector मृत प्रतीत होता है। 2012 से कोई गतिविधि नहीं। –

1

यह समाधान एक ईमेल नहीं भेजता है, लेकिन इसे यूडीपी के माध्यम से सर्वर पर भेजता है।

https://github.com/Chemik/logcatudp

स्रोत कोड उपलब्ध है। इसे आसानी से हमारे अपने ऐप में एम्बेड किया जा सकता है। मैंने ऐसा करने की कोशिश नहीं की है।

+0

यूडीपी स्रोतों के लिए लॉगकैट https://github.com/Chemik/logcatudp पर ले जाया गया है। बीटीडब्ल्यू एप्लिकेशन ईमेल पर लॉग भेज सकता है या किसी भी अन्य स्थापित ऐप का उपयोग करके इसे साझा कर सकता है। – Chemik

1

अपने मैनिफ़ेस्ट फ़ाइल दे निम्न अनुमतियों में:

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

अपने पहले/लांचर गतिविधि में, सही होने के बाद लाइनों नीचे

super.onCreate(savedInstanceState); 

लिखें: यह आपके उपकरण के लिए अपने ऐप की logcat लिखेंगे बाहरी भंडारण

 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, EXTERNAL_PERMISSION_CODE); 
    } 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, READ_PERMISSION_CODE); 
    } 

    if (isExternalStorageWritable()) { 

     File appDirectory = new File(Environment.getExternalStorageDirectory() + "/MyAppLog"); 
     File logDirectory = new File(appDirectory + "/log"); 
     File logFile = new File(logDirectory, "logcat" + ".txt"); 

     // create app folder 
     if (!appDirectory.exists()) { 
      appDirectory.mkdir(); 
     } 

     // create log folder 
     if (!logDirectory.exists()) { 
      logDirectory.mkdir(); 
     } 

     // clear the previous logcat and then write the new one to the file 
     if (logFile.exists()){ 
      logFile.delete(); 
     } 

     try { 
      Process process = Runtime.getRuntime().exec("logcat -c"); 
      process = Runtime.getRuntime().exec("logcat -f " + logFile); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } else if (isExternalStorageReadable()) { 
     // only readable 
    } else { 
     // not accessible 
    } 

वांछित ईमेल जोड़ने के लिए लॉगकैट भेजने के लिए ता: विधि नीचे जाँच बाहरी भंडारण के लिए लेखन के लिए अनुमतियाँ या दिया जाता है कि क्या नहीं के लिए

public void sendLogcatMail(){ 

    if (isExternalStorageWritable()) { 

     File appDirectory = new File(Environment.getExternalStorageDirectory() + "/MyAppLog"); 
     File logDirectory = new File(appDirectory + "/log"); 
     File logFile = new File(logDirectory, "logcat" + ".txt"); 

     if (logFile.exists()) { 
      Intent emailIntent = new Intent(Intent.ACTION_SEND); 
      emailIntent.setType("vnd.android.cursor.dir/email"); 
      String to[] = {"[email protected]"}; 
      emailIntent.putExtra(Intent.EXTRA_EMAIL, to); 
      emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(String.valueOf(logFile.toURI()))); 
      emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Log files"); 
      emailIntent.putExtra(Intent.EXTRA_TEXT, "Send some message along"); 
      startActivity(Intent.createChooser(emailIntent, "Send email...")); 
     } 
    } 
} 

विधि का उपयोग करें:

/* जांच करें कि क्या बाह्य भंडारण पढ़ने के लिए उपलब्ध है और लिखने */

public static boolean isExternalStorageWritable() { 
    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)) { 
     return true; 
    } 
    return false; 
} 
संबंधित मुद्दे