Как получить файл журнала с устройства Android?

Я хотел бы вытащить файл журнала с устройства на свой компьютер. Как я могу это сделать?

Ответ 1

Logcollector - хороший вариант, но вам нужно сначала его установить.

Когда я хочу получить файл журнала для отправки по почте, я обычно делаю следующее:

Ответ 2

Я надеюсь, что этот код поможет кому-то. Мне потребовалось 2 дня, чтобы выяснить, как регистрироваться с устройства, а затем фильтровать его:

public File extractLogToFileAndWeb(){
        //set a file
        Date datum = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.ITALY);
        String fullName = df.format(datum)+"appLog.log";
        File file = new File (Environment.getExternalStorageDirectory(), fullName);

        //clears a file
        if(file.exists()){
            file.delete();
        }


        //write log to file
        int pid = android.os.Process.myPid();
        try {
            String command = String.format("logcat -d -v threadtime *:*");        
            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) {
                   if (currentLine != null && currentLine.contains(String.valueOf(pid))) {
                       result.append(currentLine);
                       result.append("\n");
                    }
            }

            FileWriter out = new FileWriter(file);
            out.write(result.toString());
            out.close();

            //Runtime.getRuntime().exec("logcat -d -v time -f "+file.getAbsolutePath());
        } 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();
        }

        return file;
    }

как указано @mehdok

добавить разрешение манифеста для чтения журналов

<uses-permission android:name="android.permission.READ_LOGS" />

Ответ 3

Я бы использовал что-то подобное:

$adb logcat -d > logcat.txt

Параметр -d выгружает весь круговой буфер в текстовый файл, и если вы ищете конкретную попытку действия/намерения

$adb logcat -d | grep 'com.whatever.you.are.looking.for' -B 100 -A 100 > shorterlog.txt

Надеюсь, что это поможет:)

Ответ 4

ИЗМЕНИТЬ:

Внутренний журнал - это круговой буфер в памяти. На самом деле существует несколько таких циклических буферов для каждого из: радио, событий, основного. По умолчанию основной.

Чтобы получить копию буфера, один метод включает выполнение команды на устройстве и получение результата в виде строковой переменной.

SendLog - это приложение с открытым исходным кодом, которое выполняет только это: http://www.l6n.org/android/sendlog.shtml

Ключ должен запускать logcat на устройстве во встроенной ОС. Это не так сложно, как кажется, просто посмотрите приложение с открытым исходным кодом в ссылке.

Ответ 5

Для тех, кто не заинтересован в отладке USB или использовании adb, существует более простое решение. В Android 6 (не уверен о предыдущей версии) есть опция в инструментах разработчика: Take Bug Report

При нажатии этой опции будет подготовлен отчет об ошибке и предложено сохранить его на диске или отправить его по электронной почте.

Я нашел, что это самый простой способ получить журналы. Я не люблю включать USB-отладку.

Ответ 6

Часто я получаю сообщение об ошибке "logcat read: Invalid argument". Я должен был очистить журнал, прежде чем читать из журнала.

Мне нравится следующее:

prompt> cd ~/Desktop
prompt> adb logcat -c
prompt> adb logcat | tee log.txt

Ответ 7

Простым способом является создание собственных методов сбора журналов или даже всего существующего приложения для создания журналов на рынке.

В моих приложениях я создал функцию отчета, которая отправляет журналы на мой адрес электронной почты (или даже в другое место), как только вы получите журнал, который вы можете делать, если хотите с ним).

Вот простой пример того, как получить файл журнала с устройства:

Ответ 8

Благодаря пользователю1354692 я мог сделать это проще, только с одной строкой! тот, который он прокомментировал:

try {
    File file = new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()));
    Runtime.getRuntime().exec("logcat -d -v time -f " + file.getAbsolutePath());}catch (IOException e){}

Ответ 9

Я создал небольшую библиотеку (.aar) для извлечения журналов по электронной почте. Вы можете использовать его с учетными записями Gmail. Это довольно просто, но работает. Вы можете получить копию отсюда

Сайт находится на испанском языке, но есть PDF с английской версией описания продукта.

Надеюсь, это поможет.

Ответ 10

Просто выполните следующую команду, чтобы получить вывод на ваш терминал:

adb shell logcat

Ответ 11

Два шага:

  • Сгенерировать журнал
  • Загрузить Gmail для отправки журнала

.

  • Создать журнал

    File generateLog() {
        File logFolder = new File(Environment.getExternalStorageDirectory(), "MyFolder");
        if (!logFolder.exists()) {
            logFolder.mkdir();
        }
        String filename = "myapp_log_" + new Date().getTime() + ".log";
    
        File logFile = new File(logFolder, filename);
    
        try {
            String[] cmd = new String[] { "logcat", "-f", logFile.getAbsolutePath(), "-v", "time", "ActivityManager:W", "myapp:D" };
            Runtime.getRuntime().exec(cmd);
            Toaster.shortDebug("Log generated to: " + filename);
            return logFile;
        }
        catch (IOException ioEx) {
            ioEx.printStackTrace();
        }
    
        return null;
    }
    
  • Загрузите Gmail для отправки журнала

    File logFile = generateLog();
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(logFile));
    intent.setType("multipart/");
    startActivity(intent);
    

Ссылки для # 1

~~

Для # 2 - существует много разных ответов на вопрос о том, как загрузить файл журнала для просмотра и отправки. Наконец, решение здесь действительно работало с обоими:

  • загрузить Gmail в качестве опции
  • прикрепляет файл успешно

Большое спасибо fooobar.com/questions/54445/... за правильный рабочий ответ

Ответ 12

Сначала убедитесь, что команда adb является исполняемой, установив PATH на платформенные инструменты android sdk:

export PATH=/Users/espireinfolabs/Desktop/soft/android-sdk-mac_x86/platform-tools:$PATH

затем выполните:

adb shell logcat > log.txt

ИЛИ сначала перейдите к инструментам платформы adb:

cd /Users/user/Android/Tools/android-sdk-macosx/platform-tools 

затем запустите

./adb shell logcat > log.txt