2012-03-20 10 views
6

Quando si accede mio Tag sembrare sempre così: "com.myapp"Android: Filtro Logcat per tag utilizzando un'espressione regolare

com.myapp.SomeActivity 

Per ogni dichiarazione di registro ho anteporre la prima parte al tag della classe che sta effettuando la chiamata di registro. Per esempio:

MyActivity extends Activity{ 

private static final String TAG = "MyActivity"; 

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

La mia classe LogWrapper fondamentalmente fa il seguente

public class LogWrapper { 
private static final String applicationTAG = "com.myapp."; 

public static void e(String classTag, String message){ 
    Log.e(applicationTAG + classTag, message); 
} 
} 

Quindi tutto quello che faccio è anteporre un tag statico per tag della classe. Il motivo è che voglio filtrare l'output logcat dalle istruzioni Log scritte dalla mia applicazione e per evitare di ingombrare il mio file di log con i log dal sistema o da altre applicazioni.

Quindi ho fornito ottenere i registri simili:

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); 
} 

Tuttavia, risulterebbe un file di registro vuoto. Il che mi fa sembrare l'espressione regolare "com.myapp. : I" non funziona. Ho anche provato ad omettere l'asterisco () ma questo non funziona. Comunque se uso "*: I" funziona.

Ciò che mi meraviglia, se sia possibile filtrare solo con un nome tag completo? C'è un modo per ottenere un registro filtrato da "com.myapp". ?

Credo piano B sarebbe che nel ciclo while ho potuto verificare se la linea contiene il mio tag e aggiungerlo solo se questo è il caso, ma mi piacerebbe davvero evitare che ...

risposta

2

Ok per risolvere il problema ho rinunciato alla soluzione più elegante (e ancora sconosciuta) per il Plan BI accennata nel mio primo post. Uso la seguente espressione regolare per filtrare ciascuna riga del file di log che ho ottenuto utilizzando il comando logcat -d -v tempo *: I (eseguita usando() exec (comando) Runtime.getRuntime.):

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

le partite regex sopra log affermazioni simili:

I/com.myapp.MyClass Crashed and did not recover - too bad. 

la [DEWI] significa che il livello di log deve essere o D (ebug), e (rror), W (ARNING) o I (NFO) in ordina che la regex corrisponda. Se vuoi estrarre anche la registrazione V (erbose), aggiungi una "V".

Problemi correlati