Android logcat -d возвращает только частичные операторы журнала - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь прочитать журналы logcat и записать их содержимое в файл. Для этого я использую приведенный ниже код:

public class LogCatTask extends AsyncTask<Void, String, Void> {

        @Override
        protected Void doInBackground(Void... voids) {
            File dir = new File(LOG_FILE_LOCATION);
            if (!dir.exists()) {
                dir.mkdirs();
            }

            Date date = new Date();
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss", Locale.TAIWAN);
            File file = new File(dir, "logcat_" + dateFormat.format(date) + ".txt");

            //write log to file
            int pid = android.os.Process.myPid();
            try {
                String command = "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();
            } catch (IOException e) {
                Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
            }
            return null;
        }
    }

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

String command = "logcat -d -v threadtime *:*";
Process process = Runtime.getRuntime().exec(command);

Я просмотрел много ответов stackoverflow, но не смог решить эту проблему . Пожалуйста, помогите! Спасибо!

...