2012-03-20 9 views
6

Al iniciar la sesión Mis etiquetas siempre se ven como este "com.myapp." a la etiqueta de la clase que está haciendo la llamada de registro. Por ejemplo:Android:</p> <pre><code>com.myapp.SomeActivity </code></pre> <p>Para cada declaración de registro que Anteponer la primera parte: Filtro Logcat por etiqueta usando una expresión regular

MyActivity extends Activity{ 

private static final String TAG = "MyActivity"; 

public void someMethod(){ 
    LogWrapper.e(TAG, "Something is wrong here."); 
} 
} 

Mi LogWrapper clase 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 anteponer una etiqueta estática a la etiqueta de la clase. La razón es que quiero filtrar el resultado de logcat por las instrucciones de registro que escribe mi aplicación y para evitar saturar mi archivo de registro con los registros del sistema u otras aplicaciones.

De ahí se me ocurrió con la obtención de los registros de la siguiente manera:

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 en la expresión de expresiones regulares "com.myapp. : I" no funciona. También intenté omitir el asterisco () pero eso no funciona. Sin embargo, si uso "*: I", eso funciona.

Lo que me hace preguntarme si solo es posible filtrar por un nombre de etiqueta completo? ¿Hay alguna manera de obtener un registro filtrado por "com.myapp"? ?

supongo plan B sería que en el bucle mientras yo pueda comprobar si la línea contiene mi etiqueta y añadir sólo si ese es el caso, pero que realmente me gustaría evitar que ...

Respuesta

2

Ok, para resolver el problema, abandoné la solución más elegante (y todavía desconocida) para el Plan BI insinuado en mi primera publicación. Utilizo el siguiente expresión regular para filtrar cada línea del archivo de registro que obtuve mediante el comando logcat -d -v tiempo *: I (ejecutado usando Runtime.getRuntime() exec (comando).):

.*([DIWE]{1}/com.myapp.).* 

las coincidencias de expresiones regulares anteriores registran declaraciones 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 (ADVERTENCIA) o I (NFO), en orden para que la expresión regular coincida Si también desea extraer el registro V (erbose), simplemente agregue una "V".

Cuestiones relacionadas