Захватить полные логи в Android - PullRequest
3 голосов
/ 20 марта 2012

Мне было интересно, как мне взять полные журналы с устройства Android (с момента инициализации Моего приложения до любого сбоя или до принудительного закрытия моего приложения).

Причина, по которой я выкладываю сообщение, в какой-то момент происходит сбой моего приложения, но когда я беру журналы, используя DDMS / Logcat , мои данные о сбое перезаписываются новыми журналами.


Как я могу получить свои журналы сбоя причины ..


Специально для захвата нативного кода.

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


Будет ли это adb logcat> crash.txt гарантировать, что запись в файл будет происходить вечно?

Ответы [ 6 ]

5 голосов
/ 21 марта 2012

Я попробовал это работает очень хорошо, не уверен, сколько батареи он будет потреблять .. Если ваше приложение находится в стадии тестирования, вы можете использовать это .. Перед выпуском вы должны удалить этот код и опубликовать ..

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();
    } 
}
2 голосов
/ 20 марта 2012

Журнал Android будет сохраняться только в том случае, если в манифесте вашего приложения отладка = true (т. Е. Когда вы находитесь в режиме отладки).

См. Документация в Отключить ведение журнала и отладку

Так что в этом случае, если вам нужен журнал, вы можете реализовать Thread.setDefaultUncaughtExceptionHandler (обработчик Thread.UncaughtExceptionHandler)

Это будет вызываться всегда, когда ваше приложение принудительно закрыто из-за исключения.

Что вы делаете, это сохраните StackTrace в файле в режиме добавления.

Вы также можете использовать это в режиме отладки.

LogCat - это очередь, поэтому есть изменения, которые вы пропустите в своем журнале (старый журнал будет автоматически удален).

Я предлагаю вам реализовать setDefaultUncaughtExceptionHandler, чтобы вы никогда не пропустили ни одного журнала исключений.Также позаботьтесь об удалении файла после использования, иначе ваш файл со временем станет очень большим.

0 голосов
/ 20 марта 2012

Вы можете использовать acra с вашим приложением. Это поможет вам получать отчеты о сбоях в вашей учетной записи gdoc, вы также можете настроить его для получения электронной почты для отчета о сбое. Как только ваше приложение будет запущено, оно также поможет вам получить сбой.отчет.http://code.google.com/p/acra/

0 голосов
/ 20 марта 2012

Вы должны использовать уникальные Logtags для ваших сообщений, чтобы вы могли фильтровать кошку для этого.Например, getPackageName () - хороший кандидат, и он возвращает строку.

В Eclipse вы можете нажать на зеленый +, чтобы добавить еще один файл для просмотра LogCats.В этом окне вы повторяете свой тег в поле «по тегу журнала».

Кроме того, автоматически появляется новая вкладка под названием «фильтр сеанса», когда я запускаю свое приложение из Eclipse - предоставляя соответствующие журналы, включая, но не только.написанные программистом.

Вы также можете получить журнал напрямую из консоли, используя Android Developer Bridge.adb logcat - это команда, которую вы ищете, и, по словам человека, также применимы те же настройки фильтра.Хотя я не мог понять синтаксис:)

0 голосов
/ 20 марта 2012

Если у вас есть доступ к устройству:

  1. Подключите устройство к компьютеру.
  2. Запустите DDMS, выберите устройство и перейдите на вкладку проводника файлов.
  3. Найдите файл, указанный в LogCat, и нажмите кнопку «Извлечь из устройства» вверху.
0 голосов
/ 20 марта 2012

установить aLogCat приложение, затем, если ваше приложение дает сбой, запустите его. Используйте фильтр (из меню), чтобы сузить данные, связанные с вашим приложением, и в конечном итоге сохранить их или отправить с устройства по почте. Но это не принесет особого волшебства - если журналы физически исчезли с устройства, это не отправит вам больше, чем вы можете получить с помощью DDMS. Однако весьма полезно, если ваши пользователи сообщают о сбоях.

...