2010-05-21 12 views

Respuesta

95

Logcollector es una buena opción, pero es necesario instalar primero.

Cuando quiero obtener el archivo de registro para enviar por correo, que suele hacer lo siguiente:

+0

Esta línea de comandos no funciona para mí, me sale esta salida. Logcat leer: argumento no válido – neoneye

+1

en la victoria: adb.exe – Macarse

+5

nota que logcollector no funciona para versiones de Android 4.1 anterior ya que las aplicaciones están ahora sólo se les permite leer sus propias entradas de registro. (Https://groups.google.com/forum/#!topic/android-log-collector/vgYXYbg-O1U) –

10

EDIT:

El registro interno es un buffer circular en la memoria. En realidad, hay algunos pocos buffers circulares para cada uno de: radio, eventos, main. El predeterminado es main.

Para obtener una copia de un búfer, una técnica implica 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 precisamente esto: http://www.l6n.org/android/sendlog.shtml

La clave es ejecutar logcat en el dispositivo en el sistema operativo integrado. No es tan difícil como parece, solo echa un vistazo a la aplicación de código abierto en el enlace.

+0

Este vertederos la salida a la pantalla, lo necesito en un archivo. – Pentium10

+0

Puede enviar registros con aLogCat. O simplemente copiar y pegar desde DDMS: P –

+0

@molnarm concedo mi respuesta fue un poco más de la ingeniería, si eso es todo lo que tiene que hacer =) –

4

Una manera simple es crear sus propios métodos de recolección de registros o incluso solo una aplicación de recopilación de registros existente del 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í es un ejemplo sencillo de cómo conseguir el archivo de registro de un dispositivo:

7

A menudo me sale el error "logcat read: Invalid argument". Tuve que borrar el registro, antes de leer desde el registro.

me gusta esto:

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

¡Gracias! ¡Tuve ese error por mucho tiempo, ese logcat -c lo solucionó de inmediato! – Jords

21

me gustaría utilizar algo de este tipo:

$adb logcat -d > logcat.txt 

La opción -d vertederos de todo el buffer circular en el archivo de texto y si están buscando una determinada acción/intención de tratar

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

Espero que esto ayude :)

27

Espero que este código ayude a alguien.Me tomó 2 días para averiguar cómo iniciar una sesión desde el dispositivo y, a continuación, filtrarla:

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 se ha señalado por @mehdok

añadir el permiso para el manifiesto de registros de lectura

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

esto funciona bien, pero a las obras en cada dispositivo que necesita '' – mehdok

+0

no funciona para mí – NinjaCoder

2

¡Gracias al usuario1354692 pude hacerlo más fácil, con solo una línea! el que él 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){} 
+0

donde es el mejor lugar para poner este código? en 'OnCreate'? – Youngjae

+0

cuando desee los registros: P –

0

Primero hacen comando adb seguro es ejecutable mediante el establecimiento de PATH para Android SDK Platform-herramientas:

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

continuación, ejecute:

adb shell logcat > log.txt 

O primer movimiento a ADB plataforma de herramientas:

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

continuación, ejecute

./adb shell logcat > log.txt 
2

he creado una pequeña biblioteca (.aar) para recuperar los registros por correo electrónico. Puedes usarlo con cuentas de Gmail. Es bastante simple pero funciona. Puede obtener una copia from here

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.

+0

Grande, que es muy útil, gracias! – SalvoC

2

simple Simplemente ejecute el siguiente comando para obtener la salida de su terminal:

adb shell logcat 
9

Para aquellos que no están interesados ​​en la depuración USB o utilizando adb existe una solución más fácil. En Android 6 (No está seguro sobre la versión previa) hay una opción en herramientas de desarrollo: Tomar Informe Bug

Al hacer clic en esta opción, se preparará un informe de error y le pedirá que lo guarde para conducir o que le sea enviada por correo electrónico.

Encontré esta es la forma más fácil de obtener registros. No me gusta activar la depuración de USB.

+1

¡Exactamente lo que estaba buscando! – YYamil

+1

¿Dónde lo encuentro exactamente? – gurehbgui

1

dos pasos:

  • generar el registro
  • carga Gmail para enviar el registro de

.

  1. 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; 
    } 
    
  2. carga Gmail para enviar el registro de

    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 # 1

~~

Para # 2 - Hay muchas respuestas diferentes que hay para saber cómo cargar el archivo de registro para ver y enviar. Por último, la solución aquí funcionaba a la vez:

  • carga de Gmail como una opción
  • adjunta el archivo con éxito

Muchas gracias a https://stackoverflow.com/a/22367055/2162226 para la respuesta de funcionar correctamente

Cuestiones relacionadas