2012-05-07 73 views
3

我想閱讀logcat的最後n行。如果有這樣的工作?:閱讀logcat的最後N行?

Process process = Runtime.getRuntime().exec("logcat -t -500"); 
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
... 

-t數

讓logcat的打印由數及以後所指示的位置只有條目。正數表示位置相對於日誌文件的開始位置,負數表示位置相對於日誌文件的末尾。

感謝

+0

當你這樣做會發生什麼? – Nanne

+0

我沒有輸出。 – user291701

回答

0

如果只想堆棧跟蹤之後發生了異常,那麼你可以捕捉子句中使用getStackTraceString(Throwable tr)

try { 

} catch(Exception e) { 
    String crashLog = Log.getStackTraceString(e); 
    // Save crashLog to file to do something... 
} 

您可以在logcat命令中指定一個過濾器,以便至少獲得完整日誌的精簡版本。

+0

感謝代碼,我得到了logcat輸出。我正在嘗試爲無法獲取SharedPrefs.editor.commit()的用戶捕獲日誌輸出。可悲的是沒有例外。 – user291701

+0

在logcat命令中使用過濾器.. – Ronnie

+0

你是怎麼做到的? – Ronnie

3

嘗試這樣:

String[] command = { "logcat", "-t", "500" }; 
Process p = Runtime.getRuntime().exec(command); 

對於一個完整的例子檢查日誌收集器,它肯定工程:

http://code.google.com/p/android-log-collector/source/browse/trunk/android-log-collector/src/com/xtralogic/android/logcollector/SendLogActivity.java

要解釋爲什麼這個來自logcat的人的作品:

-t <count>  print only the most recent <count> lines (implies -d) 
    -t '<time>'  print most recent lines since specified time (implies -d) 
    -T <count>  print only the most recent <count> lines (does not imply -d) 
    -T '<time>'  print most recent lines since specified time (not imply -d) 
        count is pure numerical, time is 'MM-DD hh:mm:ss.mmm'