Ответы:
Logcollector - хороший вариант, но сначала вам нужно установить его.
Когда я хочу получить файл журнала для отправки по почте, я обычно делаю следующее:
adb shell logcat > log.txtadb. Обычно вC:\Users\[your username]\AppData\Local\Android\Sdk\platform-tools\
Надеюсь, этот код кому-то поможет. Мне потребовалось 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" />
<uses-permission android:name="android.permission.READ_LOGS" />
Я бы использовал что-то в этом роде:
$adb logcat -d > logcat.txt
Параметр -d выгружает весь круговой буфер в текстовый файл, и если вы ищете конкретное действие / намерение, попробуйте
$adb logcat -d | grep 'com.whatever.you.are.looking.for' -B 100 -A 100 > shorterlog.txt
Надеюсь это поможет :)
Для тех, кто не интересуется отладкой или использованием USB, adbесть более простое решение. В Android 6 (не уверен в предыдущей версии) в инструментах разработчика есть опция: Take Bug Report
При выборе этой опции будет подготовлен отчет об ошибке с предложением сохранить его на диске или отправить по электронной почте.
Я обнаружил, что это самый простой способ получить журналы. Не люблю включать отладку по USB.
РЕДАКТИРОВАТЬ:
Внутренний журнал - это кольцевой буфер в памяти. На самом деле существует несколько таких кольцевых буферов для каждого из: radio, events, main. По умолчанию - main.
Чтобы получить копию буфера, один из способов включает выполнение команды на устройстве и получение вывода в виде строковой переменной.
SendLog - это приложение с открытым исходным кодом, которое делает именно это: http://www.l6n.org/android/sendlog.shtml
Ключ к запуску logcatна устройстве во встроенной ОС. Это не так сложно, как кажется, просто посмотрите приложение с открытым исходным кодом по ссылке.
Часто получаю ошибку " logcat read: Invalid argument". Мне пришлось очистить журнал перед чтением из журнала.
Мне это нравится:
prompt> cd ~/Desktop
prompt> adb logcat -c
prompt> adb logcat | tee log.txt
Простой способ - создать свои собственные методы сборщика журналов или даже просто существующее приложение для сборщика журналов с рынка.
Для своих приложений я сделал функцию отчета, которая отправляет журналы на мою электронную почту (или даже в другое место - как только вы получите журнал, вы можете делать с ним, как хотите).
Вот простой пример того, как получить файл журнала с устройства:
Просто выполните следующую команду, чтобы получить вывод на свой терминал:
adb shell logcat
Я знаю, что это старый вопрос, но я считаю, что он остается актуальным даже в 2018 году.
Существует возможность создать отчет об ошибке, скрытый в параметрах разработчика на каждом устройстве Android.
ПРИМЕЧАНИЕ. Это приведет к сбросу всего системного журнала.
Как включить параметры разработчика? см. https://developer.android.com/studio/debug/dev-options
Что мне подходит:
как это читать? открыть bugreport-1960-01-01-чч-мм-ss.txt
вы, вероятно, захотите найти что-то вроде этого:
------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of crash
06-13 14:37:36.542 19294 19294 E AndroidRuntime: FATAL EXCEPTION: main
или:
------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of main
Благодаря user1354692 я смог сделать это проще, используя только одну строку! тот, который он прокомментировал:
try {
File file = new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()));
Runtime.getRuntime().exec("logcat -d -v time -f " + file.getAbsolutePath());}catch (IOException e){}
OnCreate?
Я создал небольшую библиотеку (.aar) для получения журналов по электронной почте. Вы можете использовать его с учетными записями Gmail. Это довольно просто, но работает. Вы можете получить копию здесь
Сайт на испанском языке, но есть PDF-файл с английской версией описания продукта.
Надеюсь, это поможет.
Два шага:
- Создать журнал
- Загрузите 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 как вариант
- успешно прикрепляет файл
Большое спасибо https://stackoverflow.com/a/22367055/2162226 за правильно рабочий ответ
Сначала убедитесь, что команда adb выполняется, установив PATH для android sdk platform-tools:
export PATH=/Users/espireinfolabs/Desktop/soft/android-sdk-mac_x86/platform-tools:$PATH
затем запустите:
adb shell logcat > log.txt
ИЛИ сначала перейдите к adb platform-tools:
cd /Users/user/Android/Tools/android-sdk-macosx/platform-tools
затем беги
./adb shell logcat > log.txt