Java 如何将所有logcat条目存储到android中的文件中
当我在PC上使用命令提示符并连接设备并运行abd来执行下面的命令时Java 如何将所有logcat条目存储到android中的文件中,java,android,logcat,Java,Android,Logcat,当我在PC上使用命令提示符并连接设备并运行abd来执行下面的命令时 abd logcat -d > abc.txt 它返回一个大文件“abc.txt”,其中包含所有应用程序的logcat的所有条目。但是,当我在android上的应用程序中运行相同的命令,通过生成文件将其存储在SD卡上时,它只存储最近的logcat条目,并且只存储该应用程序的日志,甚至不存储以前的日志。有人能告诉我为什么会发生这种情况吗?我也允许阅读日志 这是android代码 String fullName = "ap
abd logcat -d > abc.txt
它返回一个大文件“abc.txt”,其中包含所有应用程序的logcat的所有条目。但是,当我在android上的应用程序中运行相同的命令,通过生成文件将其存储在SD卡上时,它只存储最近的logcat条目,并且只存储该应用程序的日志,甚至不存储以前的日志。有人能告诉我为什么会发生这种情况吗?我也允许阅读日志
这是android代码
String fullName = "appLog.txt";
File file = new File (Environment.getExternalStorageDirectory(), fullName);
//clears a file
if(file.exists()){
file.delete();
}
//write log to file
try {
String command = String.format("logcat -d");
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) {
result.append(currentLine);
result.append("\n");
}
FileWriter out = new FileWriter(file);
out.write(result.toString());
out.close();
} 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();
}
在果冻豆中,这种情况发生了变化。应用程序只能读取自己的日志,不需要再读取日志权限 作为替代方案,您可以使用。您可以使用file appender将所有日志存储在某个文件中,还可以使用
LogCatAppender
将日志打印到logcat,这样您就可以在eclipse中进行开发时查看日志,例如
为了捕获所有未捕获的异常,您可以创建实现的类,然后将其与Thread.setDefaultUncaughtExceptionHandler()一起使用。这对于将崩溃报告(堆栈跟踪)打印到日志和/或单独的文件非常有用
public void appendLog(String text)
{
File logFile = new File("/sdcard/log.txt");
if (!logFile.exists())
{
try
{
logFile.createNewFile();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try
{
BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true));
buf.append(text);
buf.newLine();
buf.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
并使用该方法从需要的任何位置登录
appendLog("your message" + anyvalueyouwanttolog );
但是应用程序可以读取自己以前的日志吗。我的意思是,我运行一个应用程序,它只读取在此执行过程中发生的日志。我想要所有以前执行的应用程序日志。这也是可能的吗?由于日志文件是旋转的,您可能会在检索时看到您可以看到的所有应用程序日志。任何获取所有日志的方法,因为我需要日志中的崩溃信息。。。如何获取此应用程序的所有日志?我编辑了答案,你可以使用UncaughtExceptionHandler。但是有些崩溃,比如与本机操作系统相关的内存相关的崩溃,在这里没有被捕获。我的代码中已经有了它。这就是为什么我想让androids logcat为我的应用程序记录整个历史。我的问题是,当我在上面的代码中遇到崩溃时,我想捕获并获取日志文件。崩溃将不会被解释。。。