如何将所有logcat条目存储到android中的文件中

时间:2015-01-14 06:31:11

标签: java android logcat

当我在PC上使用命令提示符并连接设备并运行abd以执行以下命令

abd logcat -d > abc.txt

它返回一个大文件" abc.txt"包含所有应用程序的logcat的所有条目。但是,当我在Android上的应用程序中运行相同的命令,通过制作文件将其存储在SD卡上时,它只存储最近的logcat条目,并且只存储此应用程序的日志,甚至不存在以前的日志。有人可以告诉我为什么会发生这种情况我也同意READ_LOGS

这是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();
    }

2 个答案:

答案 0 :(得分:0)

在果冻豆中,这已经改变了。应用程序只能读取自己的日志,不再需要READ_LOGS权限。

作为替代方案,您可以使用log4j for android。您可以使用文件追加器将所有日志存储在某个文件中,并使用LogCatAppender将日志打印到logcat,这样您就可以在eclipse中开发时查看日志,例如。

为了捕获所有未捕获的异常,您可以创建实现UncaughtExceptionHandler的类,然后将其与Thread.setDefaultUncaughtExceptionHandler()一起使用。这对于将崩溃报告(堆栈跟踪)打印到日志和/或单独的文件非常有用。

答案 1 :(得分:0)

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 );