在Android中捕获完整的LOGS

时间:2012-03-20 13:33:09

标签: android adb logcat logging

我想知道如何从Android设备中获取完整的日志(从我的应用程序初始化到任何崩溃或直到我的应用程序强制关闭)。

我在这里发布的原因是我的应用程序崩溃了一些点,但是当我使用 DDMS / Logcat 来记录日志时,我的崩溃详细信息都是用新日志写的。


我如何得到崩溃的原因日志..


特别希望捕获本机代码崩溃。

I/DEBUG (21835): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000004...

adb logcat> crash.txt 确保我写文件会永远发生吗?

6 个答案:

答案 0 :(得分:5)

我试过这个工作真的很好,不确定它将消耗多少电池。如果您的应用程序处于测试阶段您可以使用此..在发布之前,您必须删除此代码并发布..

private void writeADBLogs(){
     BufferedWriter bufferedWriter = null;

      try {
         final File file = new File(sdcardPath);
        bufferedWriter = new BufferedWriter(new FileWriter(file,true));
        Process process = Runtime.getRuntime().exec("logcat -d");
        BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream()));

        String oneLine;
          while ((oneLine= bufferedReader.readLine()) != null) {
              bufferedWriter.write(oneLine);
              bufferedWriter.newLine();
          }
    } catch (IOException e) {
        e.printStackTrace();
    } 
}

答案 1 :(得分:2)

仅当您的应用程序在清单中具有Debugging = true时(即处于调试模式时),才会保存Android日志。

请参阅关闭日志记录和调试

上的Documentation

因此,在这种情况下,如果您想要日志,那么您可以实现Thread.setDefaultUncaughtExceptionHandler (Thread.UncaughtExceptionHandler handler)

当您的应用程序因异常而被强制关闭时,将始终调用此方法。

您要做的是将StackTrace保存在附加模式的文件中。

您也可以在调试模式下使用它。

LogCat是一个队列,因此有些更改会让您错过日志(旧的日志将被自动丢弃)。

我建议你实现setDefaultUncaughtExceptionHandler,这样你就不会错过任何异常日志。使用后也要小心删除文件,否则你的文件会变得非常大。

答案 2 :(得分:0)

安装aLogCat应用,然后如果您的应用崩溃,请启动它。使用过滤器(从菜单中)缩小与应用程序相关的数据,最后将其保存或通过邮件发送给您。但是它不会做太多的魔术 - 如果日志从设备中消失,它将不会向您发送更多的DDMS。但是,如果您的用户报告崩溃,则非常有用。

答案 3 :(得分:0)

假设您有权访问该设备:

  1. 将设备挂在计算机上。
  2. 运行DDMS,选择设备,然后转到文件资源管理器选项卡。
  3. 找到LogCat中引用的文件,然后单击顶部附近的“从设备拉取”按钮。

答案 4 :(得分:0)

您应该为邮件使用唯一的Logtags,以便您可以为此过滤猫。例如。 getPackageName()是一个很好的候选者,它返回一个字符串。

在Eclipse中,您可以单击绿色+为LogCats View添加另一个文件管理器。在窗口中,您可以在“按日志标记”字段中重复标记。

当我从Eclipse启动我的应用程序时,似乎会自动出现一个名为“会话过滤器”的新标签 - 提供相关日志,包括但不仅仅是程序员编写的日志。

您还可以使用Android Developer Bridge直接从控制台获取日志。 adb logcat是您正在寻找的命令,根据人类,也有适用的相同过滤器设置。虽然我无法弄清楚语法:)

答案 5 :(得分:0)

您可以在您的应用程序中使用acra。它可以帮助您在gdoc帐户中获取崩溃报告,您也可以将其配置为收到崩溃报告的电子邮件。一旦您的应用程序上线,它也可以帮助您获得崩溃报告。 http://code.google.com/p/acra/