2011-05-30 15 views
65

जब भी उपयोगकर्ता लॉग एकत्र करना चाहता है तो मैं एक फ़ाइल में एंड्रॉइड लॉगकैट को डंप करना चाहता हूं। एडीबी टूल्स के माध्यम से हम adb logcat -f filename का उपयोग कर लॉग को रीडायरेक्ट कर सकते हैं, लेकिन मैं प्रोग्रामेटिक तरीके से यह कैसे कर सकता हूं?फ़ाइल के लिए एंड्रॉइड लॉगकैट डेटा लिखें

+0

http://stackoverflow.com/a/8417757/1012284 –

उत्तर

118

लॉग पढ़ने के लिए यहां example है।

आप इसे TextView की बजाय फ़ाइल में लिखने के लिए बदल सकते हैं।

AndroidManifest में अनुमति की जरूरत:

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

कोड:

public class LogTest extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    try { 
     Process process = Runtime.getRuntime().exec("logcat -d"); 
     BufferedReader bufferedReader = new BufferedReader(
     new InputStreamReader(process.getInputStream())); 

     StringBuilder log = new StringBuilder(); 
     String line; 
     while ((line = bufferedReader.readLine()) != null) { 
     log.append(line); 
     } 
     TextView tv = (TextView) findViewById(R.id.textView1); 
     tv.setText(log.toString()); 
    } catch (IOException e) { 
    } 
    } 
} 
+2

@ jkhouw1 ... +60 सर्वश्रेष्ठ उत्तर मैं कभी देखा और शानदार तरीका एक जवाब है, यह भी पोस्ट करने के लिए (मैं आपसे सीखता हूं) यह उत्तर हमेशा सहायक होगा, यहां तक ​​कि लिंक मर गया है, मुझे केवल स्क्रॉल व्यू जोड़ने की ज़रूरत है और मैंने जो कुछ किया है, मैंने आपके जवाब के कारण किया है, चीयर्स !! – swiftBoy

+0

ग्रेट..लेकिन टैग के अनुसार इन लॉग को फ़िल्टर करने का कोई तरीका है? – AbhishekB

+1

मैंने इसका परीक्षण नहीं किया है, लेकिन मुझे लगता है कि आप इसे "logcat -d -s yourTagToFilterOn" में बदल देंगे – jkhouw1

38

Logcat एक फ़ाइल को सीधे लिख सकते हैं:

public static void saveLogcatToFile(Context context) {  
    String fileName = "logcat_"+System.currentTimeMillis()+".txt"; 
    File outputFile = new File(context.getExternalCacheDir(),fileName); 
    @SuppressWarnings("unused") 
    Process process = Runtime.getRuntime().exec("logcat -f "+outputFile.getAbsolutePath()); 
} 
logcat पर

अधिक जानकारी: देखने http://developer.android.com/tools/debugging/debugging-log.html

+1

यह आदेश स्टाल लगता है क्योंकि logcat -f स्वचालित रूप से बाहर नहीं निकलता है। किसी फ़ाइल में लॉग लिखने और logcat -d के समान प्रक्रिया को स्वचालित रूप से बाहर निकलने का कोई तरीका? – Phillip

+0

इसे एक अंत तक रखने की कोशिश करें इसे पृष्ठभूमि बनाएं। – ShihabSoft

+4

logcat -df सभी लॉग पर डुबोएं और तुरंत बाहर निकलें। –

1

या आप इस Varian

 
try { 
    final File path = new File(
      Environment.getExternalStorageDirectory(), "DBO_logs5"); 
    if (!path.exists()) { 
     path.mkdir(); 
    } 
    Runtime.getRuntime().exec(
      "logcat -d -f " + path + File.separator 
        + "dbo_logcat" 
        + ".txt"); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
0
public static void writeLogToFile(Context context) {  
    String fileName = "logcat.txt"; 
    File file= new File(context.getExternalCacheDir(),fileName); 
    if(!file.exists()) 
     file.createNewFile(); 
    String command = "logcat -f "+file.getAbsolutePath(); 
    Runtime.getRuntime().exec(command); 
} 

विधि से ऊपर की कोशिश फ़ाइल में सभी लॉग लिखेंगे कर सकते हैं। इसके अलावा मालसूची फ़ाइल में अनुमतियाँ नीचे जोड़ने कृपया

<uses-permission android:name="android.permission.READ_LOGS" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
संबंधित मुद्दे