Respuestas:
Logcollector es una buena opción, pero primero debe instalarlo.
Cuando quiero obtener el archivo de registro para enviar por correo, generalmente hago lo siguiente:
adb shell logcat > log.txtadb. Por lo general, enC:\Users\[your username]\AppData\Local\Android\Sdk\platform-tools\
Espero que este código ayude a alguien. Me tomó 2 días descubrir cómo iniciar sesión desde el dispositivo y luego filtrarlo:
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;
}
como lo señaló @mehdok
agregar el permiso al manifiesto para leer registros
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_LOGS" />
Usaría algo de este tipo:
$adb logcat -d > logcat.txt
La opción -d volca todo el búfer circular en el archivo de texto y si está buscando una acción / intento particular, intente
$adb logcat -d | grep 'com.whatever.you.are.looking.for' -B 100 -A 100 > shorterlog.txt
Espero que esto ayude :)
Para aquellos que no estén interesados en la depuración o el uso de USB, adbexiste una solución más fácil. En Android 6 (No estoy seguro sobre la versión anterior) hay una opción en las herramientas del desarrollador: Take Bug Report
Al hacer clic en esta opción, se preparará un informe de error y se le pedirá que lo guarde en la unidad o que lo envíe por correo electrónico.
Encontré que esta es la forma más fácil de obtener registros. No me gusta activar la depuración de USB.
EDITAR:
El registro interno es un búfer circular en la memoria. En realidad, hay algunos búferes circulares para cada uno de: radio, eventos, principal. El valor predeterminado es principal.
Para obtener una copia de un búfer, una técnica consiste en ejecutar un comando en el dispositivo y obtener el resultado como una variable de cadena.
SendLog es una aplicación de código abierto que hace exactamente esto: http://www.l6n.org/android/sendlog.shtml
La clave es ejecutar logcaten el dispositivo en el sistema operativo incorporado. No es tan difícil como parece, solo echa un vistazo a la aplicación de código abierto en el enlace.
A menudo me sale el error " logcat read: Invalid argument". Tuve que borrar el registro, antes de leerlo.
Me gusta esto:
prompt> cd ~/Desktop
prompt> adb logcat -c
prompt> adb logcat | tee log.txt
Una manera simple es crear sus propios métodos de recopilación de registros o incluso solo una aplicación de recopilación de registros existente en el mercado.
Para mis aplicaciones, hice una funcionalidad de informe que envía los registros a mi correo electrónico (o incluso a otro lugar; una vez que obtiene el registro, puede hacer si lo desea).
Aquí hay un ejemplo simple sobre cómo obtener el archivo de registro de un dispositivo:
Simple simplemente ejecute el siguiente comando para obtener la salida a su terminal:
adb shell logcat
Sé que es una vieja pregunta, pero creo que aún es válida incluso en 2018.
Hay una opción para tomar un informe de error oculto en las opciones de desarrollador en cada dispositivo Android.
NOTA: Esto volcaría todo el registro del sistema
¿Cómo habilitar las opciones de desarrollador? ver: https://developer.android.com/studio/debug/dev-options
Lo que funciona para mi:
como leer esto informe de error abierto -1960-01-01-hh-mm-ss.txt
probablemente quieras buscar algo como esto:
------ 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
o:
------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of main
Gracias al usuario 1354692 pude hacerlo más fácil, ¡con solo una línea! el que ha comentado:
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?
He creado una pequeña biblioteca (.aar) para recuperar los registros por correo electrónico. Puede usarlo con cuentas de Gmail. Es bastante simple pero funciona. Puedes obtener una copia desde aquí
El sitio está en español, pero hay un PDF con una versión en inglés de la descripción del producto.
Espero que pueda ayudar.
Dos pasos:
- Generar el registro
- Cargue Gmail para enviar el registro.
.
Generar el registro
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;
}Cargue Gmail para enviar el registro.
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);Referencias para el n. ° 1
~~
Para el n. ° 2: existen muchas respuestas diferentes sobre cómo cargar el archivo de registro para verlo y enviarlo. Finalmente, la solución aquí realmente funcionó para ambos:
- cargar Gmail como una opción
- adjunta el archivo con éxito
Muchas gracias a https://stackoverflow.com/a/22367055/2162226 por la respuesta que funciona correctamente
Primero asegúrese de que el comando adb sea ejecutable configurando PATH en android sdk platform-tools:
export PATH=/Users/espireinfolabs/Desktop/soft/android-sdk-mac_x86/platform-tools:$PATH
entonces corre:
adb shell logcat > log.txt
O primero muévase a adb platform-tools:
cd /Users/user/Android/Tools/android-sdk-macosx/platform-tools
entonces corre
./adb shell logcat > log.txt