Guardar Logcat en un archivo de texto en el dispositivo Android
Había encontrado algunos accidentes durante la ejecución de la aplicación en el dispositivo Android, que no se muestra en el emulador. Así que necesito guardar el Logcat en un archivo de texto en la memoria de mi dispositivo o tarjeta SD. ¿Podría por favor sugerirme un buen método para hacer esto?
- ¿Cómo puedo borrar los datos antiguos de logcat?
- LogCat no funciona después de la actualización a Android N
- La aplicación de Android no iniciará noClassDefFoundError
- Los filtros ADT Logcat desaparecen y dejan de funcionar
- Cómo filtrar una variable en el visor de Eclipse LogCat
- Enviar correo electrónico mediante programación en Android
- Log.e no imprime el rastro de pila de UnknownHostException
- Android: Logcat no muestra nada en Intellij IDEA
- Deshabilitar los mensajes de WebView de la salida de logcat
- LogCat no muestra TAG "SMS"
- "AndroidRuntime: Apagar VM" con nada más
- ¿Puedo ver el Logcat en el teléfono Android en sí, sin conectarlo al ordenador?
- Filtrado Logcat en la línea de comandos
adb shell logcat -t 500 > D:\logcat_output.txt
Vaya a su terminal / línea de comandos y navegue a la carpeta con adb en ella, si su no ya se ha añadido a sus variables ambientales y pegar este comando.
T son las líneas numéricas que necesita para ver
D: \ logcat_output.txt es donde su logcat se almacenará.
Utilice una clase de aplicación al principio de su aplicación. Eso permite un manejo adecuado de archivos y registros. Aquí hay un ejemplo. Ese fragmento de código añade una nueva carpeta denominada "MyPersonalAppFolder" con otra carpeta llamada "registro" en el almacenamiento público externo. Después de que la salida logcat se borra y la nueva salida logcat se escribe en un nuevo archivo llamado logcatXXX.txt, donde XXX es el son el tiempo de milisegundos en este momento.
public class MyPersonalApp extends Application { /** * Called when the application is starting, before any activity, service, or receiver objects (excluding content providers) have been created. */ public void onCreate() { super.onCreate(); if ( isExternalStorageWritable() ) { File appDirectory = new File( Environment.getExternalStorageDirectory() + "/MyPersonalAppFolder" ); File logDirectory = new File( appDirectory + "/log" ); File logFile = new File( logDirectory, "logcat" + System.currentTimeMillis() + ".txt" ); // create app folder if ( !appDirectory.exists() ) { appDirectory.mkdir(); } // create log folder if ( !logDirectory.exists() ) { logDirectory.mkdir(); } // clear the previous logcat and then write the new one to the file try { Process process = Runtime.getRuntime().exec("logcat -c"); process = Runtime.getRuntime().exec("logcat -f " + logFile); } catch ( IOException e ) { e.printStackTrace(); } } else if ( isExternalStorageReadable() ) { // only readable } else { // not accessible } } /* Checks if external storage is available for read and write */ public boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if ( Environment.MEDIA_MOUNTED.equals( state ) ) { return true; } return false; } /* Checks if external storage is available to at least read */ public boolean isExternalStorageReadable() { String state = Environment.getExternalStorageState(); if ( Environment.MEDIA_MOUNTED.equals( state ) || Environment.MEDIA_MOUNTED_READ_ONLY.equals( state ) ) { return true; } return false; } }
Necesita los permisos correctos en su archivo .manifest:
<uses-permission android:name="android.permission.READ_LOGS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Ahora ejecuta tu aplicación y goto "/ tu almacenamiento externo / MyPersonalAppFolder / logs /"
Allí encontrará un archivo de registro.
Fuente: http://www.journal.deviantdev.com/android-log-logcat-to-file-while-runtime/
Editar:
Si desea guardar el registro de sólo algunas actividades en particular ..
reemplazar:
process = Runtime.getRuntime().exec("logcat -f " + logFile);
con:
process = Runtime.getRuntime().exec( "logcat -f " + logFile + " *:S MyActivity:D MyActivity2:D");
Utilice la opción -f con logcat en su clase:
Runtime.getRuntime().exec("logcat -f" + " /sdcard/Logcat.txt");
Esto volcará los registros al dispositivo almacenado en el archivo.
Tenga en cuenta que la ruta "/ sdcard /" puede no estar disponible en todos los dispositivos. Debe utilizar las API estándar para acceder al almacenamiento externo .
Agregue el permiso de manifiesto:
uses-permission android:name="android.permission.READ_LOGS" private static final String COMMAND = "logcat -d -v time"; public static void fetch(OutputStream out, boolean close) throws IOException { byte[] log = new byte[1024 * 2]; InputStream in = null; try { Process proc = Runtime.getRuntime().exec(COMMAND); in = proc.getInputStream(); int read = in.read(log); while (-1 != read) { out.write(log, 0, read); read = in.read(log); } } finally { if (null != in) { try { in.close(); } catch (IOException e) { // ignore } } if (null != out) { try { out.flush(); if (close) out.close(); } catch (IOException e) { // ignore } } } } public static void fetch(File file) throws IOException { FileOutputStream fos = new FileOutputStream(file); fetch(fos, true); }
Si sólo necesita guardar el logcat (sin su codificación), puede utilizar las aplicaciones aLogrec
o aLogcat
de Google Play.
Google Play Store: aLogcat y aLogrec
Como no puedo comentar todavía, publicaré esto como una respuesta
Hice lo que @HeisenBerg dijo, funcionó bien para mí, pero desde Android 6.0 en tenemos que pedir permiso en tiempo de ejecución, tuve que añadir lo siguiente:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if(checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); } }
Y llama
process = Runtime.getRuntime().exec("logcat -f " + logFile);
Sólo en la devolución de llamada onRequestPermissionsResult
- ¿Cómo hago pausas la animación de los cuadros usando AnimationDrawable?
- Android: Theme Holo versión anterior