2012-03-20 8 views
6

kullanarak etiketi ile süzgeçle Logcat: "com.myapp" Ben ilk bölümü prepend her bir günlük deyimi içinAndroid: my Etiketler hep böyle bakmak oturum açarken bir regex

com.myapp.SomeActivity 

log çağrısı yapan sınıfın etiketine. Örneğin:

MyActivity extends Activity{ 

private static final String TAG = "MyActivity"; 

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

Benim sınıf LogWrapper temelde aşağıdaki

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

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

yapar Yani yaptığım sınıfın etiketine statik Tag Önlerine edilir. Nedeni, logcat çıktısını benim uygulama yazdığım Log deyimleriyle filtrelemek ve log dosyamı sistemden veya diğer uygulamalardan günlükler ile karıştırmamaktan kaçınmak.

Dolayısıyla böyle Kayıtlar elde geldi:

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

Ancak, boş kayıt dosyasına ile sonuna kadar. Hangi bana bir şey regex ifadesi yapar "com.myapp. : Ben" çalışmıyor. Aynı zamanda asteriks'i () atlamayı denedim ama bu da işe yaramıyor. Ancak çalışırsam "*: Ben" kullanırsam.

Sadece bir etiket adıyla filtrelemenin mümkün olup olmadığını merak etmeme neden olan şey nedir? "Com.myapp" tarafından filtrelenen bir günlük tutmanın bir yolu var mı? ?

Ben B planı süre döngü içinde ben çizgi Etiketimi içeriyorsa kontrol etmek ve bu durum yalnızca ekler, ama gerçekten önlemek isterim ki olacağını tahmin ...

cevap

2

Sorunu çözmek için ilk adımı attığım Plan BI için daha zarif (ve hala bilinmeyen) çözümden vazgeçtim. I logcat v zaman * -d komutu kullanılarak elde edilen kayıt dosyasına her satırı süzmek için aşağıdaki normal ifade kullanın: I (() exec (komut) Runtime.getRuntime kullanılarak yürütülür.):

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

yukarıdaki normal ifade maçlar bu ifadeleri log:

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

[DEWI] günlük düz olmalıdır, yani D (ebug), E (rror), W (UYARI) veya I (nfo) içerisinde düzenli ifadenin eşleşmesi için. V (erbose) kaydı da almak istiyorsanız, sadece bir "V" ekleyin.