我想将我的app logcat事件保存在SD卡上的文本文件中。 我的警报应用程序在我和我的朋友设备中正常工作,但其他人在我的应用程序上有错误。 例如,他们说应用程序中的警报是在错误的时间,但我没有在我和我的朋友设备中看到此错误。 由于这个问题和其他问题,我希望保存所有事件logcat相关我的应用程序,自动。所以他们发送日志文件给我来解决问题。 我怎样才能做到这一点? 谢谢 抱歉我的英文不好
答案 0 :(得分:3)
您可以通过以下方式获取logcat:
static final int BUFFER_SIZE = 1024;
public String getLogCat() {
String[] logcatArgs = new String[] {"logcat", "-v", "time"};
Process logcatProc = null;
try {
logcatProc = Runtime.getRuntime().exec(logcatArgs);
}
catch (IOException e) {
return null;
}
BufferedReader reader = null;
String response = null;
try {
String separator = System.getProperty("line.separator");
StringBuilder sb = new StringBuilder();
reader = new BufferedReader(new InputStreamReader(logcatProc.getInputStream()), BUFFER_SIZE);
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
sb.append(separator);
}
response = sb.toString();
}
catch (IOException e) {
}
finally {
if (reader != null) {
try {
reader.close();
}
catch (IOException e) {}
}
}
return response;
}
然后,您可以将此String
保存到SD卡。
答案 1 :(得分:1)
此类功能已由ACRA Android库实施。该库会检测到崩溃,并将崩溃信息发送到Google文档电子表格或您自己的目的地。
答案 2 :(得分:1)
您可以通过以下方式获取logcat:
static final int BUFFER_SIZE = 1024;
public String getLogCat() {
String[] logcatArgs = new String[] {"logcat", "-v", "time"};
Process logcatProc = null;
try {
logcatProc = Runtime.getRuntime().exec(logcatArgs);
}
catch (IOException e) {
return null;
}
BufferedReader reader = null;
String response = null;
try {
String separator = System.getProperty("line.separator");
StringBuilder sb = new StringBuilder();
reader = new BufferedReader(new InputStreamReader(logcatProc.getInputStream()), BUFFER_SIZE);
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
sb.append(separator);
}
response = sb.toString();
}
catch (IOException e) {
}
finally {
if (reader != null) {
try {
reader.close();
}
catch (IOException e) {}
}
}
return response;
}
然后,您可以将此
String
保存到SD卡。
来自“Dororo”的回答对我来说不起作用,因为它总是因为许多行而陷入困境,但我不知道如何解决这个问题。
答案 3 :(得分:1)
除非您指定'-d'arg。
,否则logcat将阻止读取新日志尝试
String[] logcatArgs = new String[] {"logcat", "-d", "-v", "time"};
答案 4 :(得分:1)
在线程内执行以避免ANR