2012-03-20 25 views
6

Po zalogowaniu mój Tagi zawsze wyglądać tak: „com.myapp”Android: Filtr Logcat przez tag używając regex

com.myapp.SomeActivity 

dla każdej instrukcji dziennika ja poprzedzić pierwszą część do znacznika klasy, która wykonuje wywołanie dziennika. Na przykład:

MyActivity extends Activity{ 

private static final String TAG = "MyActivity"; 

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

Moja klasa LogWrapper zasadzie robi następującą

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

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

Więc wszystko co robię jest dołączana statyczny tag do tagu klasy za. Powodem jest to, że chcę filtrować dane wyjściowe logcat za pomocą instrukcji Log, które moja aplikacja zapisuje, i aby nie zaśmiecać mojego pliku dziennika logami z systemu lub innych aplikacji.

Stąd że pojawił się z uzyskaniem logi tak:

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

Jednakże, w końcu z pustym dzienniku. Co czyni mnie rzeczą wyrażenia regex "com.myapp. :" Nie działa. Próbowałem również pominąć asterix (), ale to nie działa. Jednak jeśli użyję "*: I", który działa.

Co mnie zastanawia, czy możliwe jest filtrowanie wyłącznie według pełnej nazwy znacznika? Czy istnieje sposób, w jaki mogę uzyskać dziennik, który jest filtrowany przez "com.myapp". ?

Chyba Plan B byłoby to, że w pętli while mogę sprawdzić, czy mój wiersz zawiera znacznik i dołączyć go tylko, czy to przypadek, ale naprawdę chciałbym tego uniknąć ...

Odpowiedz

2

Ok, aby rozwiązać problem, podałem jeszcze bardziej eleganckie (i wciąż nieznane) rozwiązanie do planu BI, o którym wspomniałem w moim pierwszym poście. I użyć następującego wyrażenia regularnego do filtrowania każdy wiersz pliku dziennika, że ​​uzyskane za pomocą polecenia logcat -d -v czas *: I (wykonywane przy użyciu Runtime.getRuntime exec (command()).):

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

Powyższe wyniki regex stwierdzenia log tak:

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

Sieć [DEWI] oznacza to, że poziom log musi być D (ebug), E (rror), w (STRZEŻENIE) lub I (NFO), w aby dopasować wyrażenie regularne. Jeśli chcesz wyodrębnić rejestrowanie V (erbose), po prostu dodaj "V".

Powiązane problemy