Android: Filtrar Logcat por etiqueta mediante un regex
Cuando registra mis Tags siempre se parecen a esto:
com.myapp.SomeActivity
Para cada instrucción de registro agrego la primera parte "com.myapp". A la etiqueta de la clase que está realizando la llamada de registro. Por ejemplo:
- Android "Apagar VM" sin stacktrace
- Colorear las líneas de logcat en Linux
- Logcat no puede detectar nombres de aplicaciones o paquetes
- Visor de Logcat en Eclipse parpadea de manera molesta
- Las sentencias de registro no se llaman onCreate ()
MyActivity extends Activity{ private static final String TAG = "MyActivity"; public void someMethod(){ LogWrapper.e(TAG, "Something is wrong here."); } }
Mi clase LogWrapper básicamente hace lo siguiente
public class LogWrapper { private static final String applicationTAG = "com.myapp."; public static void e(String classTag, String message){ Log.e(applicationTAG + classTag, message); } }
Así que todo lo que hago es prepend una etiqueta estática a la etiqueta de la clase. La razón es que quiero filtrar la salida de logcat por las sentencias de registro que escribe mi aplicación y evitar que se estorbe mi archivo de registro con registros del sistema u otras aplicaciones.
De ahí surgió la obtención de los Logs como este:
String command = "logcat -d -v time com.myapp.*:I *:S" Process process = Runtime.getRuntime().exec(command); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream())); StringBuilder log = new StringBuilder(); String line; while ((line = bufferedReader.readLine()) != null) { log.append(line); log.append(StringUtils.NEW_LINE); }
Sin embargo, termino con un archivo de registro vacío. Lo que me hace pensar que la expresión regex "com.myapp .: I" no funciona. También intenté omitir el asterix ( ) pero eso no funciona. Sin embargo, si utilizo "*: I" que funciona.
¿Qué me hace pensar, si sólo es posible filtrar por un nombre de etiqueta completa? ¿Hay una manera que puedo conseguir el asimiento de un registro que sea filtrado por "com.myapp." ?
Supongo que el plan B sería que en el bucle while podría comprobar si la línea contiene mi etiqueta y adjuntarla sólo si ese es el caso, pero me gustaría evitar que …
- Logcat en android L no se borra después de desconectar y volver a conectar
- Android: Logcat no muestra nada en Intellij IDEA
- ¿Cómo deshabilitar D / libc de registrar la información de red en logcat?
- Error que abre el archivo del rastro: Ningún archivo o directorio (2)
- Tamaño de rotación de Android Logcat y número de parámetros de rotación
- Android studio número máximo de líneas logcat
- ¿Qué habilita el Android LogCat de Eclipse?
- No se puede ver la salida de depuración al ejecutar el emulador de Android
Ok para resolver el problema que dio a la solución más elegante (y aún desconocido) para el Plan BI sugerido en mi primer post. Utilizo el siguiente regex para filtrar cada línea del archivo de registro que obtuve usando el comando logcat -d -v time *: I (ejecutado mediante Runtime.getRuntime (). Exec (command)):
.*([DIWE]{1}/com.myapp.).*
La regex anterior coincide con declaraciones de registro como esta:
I/com.myapp.MyClass Crashed and did not recover - too bad.
El [DEWI] significa que, el nivel de registro debe ser D (ebug), E (rror), W (arning) o I (nfo) para que la regex coincida. Si también desea extraer el registro V (erbose), simplemente añada una "V".
- Cómo dibujar gráfico de línea con diferentes colores en línea única
- ¿Hay una aplicación web "añadir a la pantalla de inicio" en Android (como en iOS)