2012-03-20 15 views
6

का उपयोग करते समय प्रवेश करने मेरी टैग हमेशा इस तरह दिखेगा: "। Com.myapp"एंड्रॉयड: टैग द्वारा फ़िल्टर Logcat एक regex

com.myapp.SomeActivity 

मैं पहले भाग पहले जोड़ें प्रत्येक लॉग बयान के लिए कक्षा के टैग को जो लॉग कॉल कर रहा है। उदाहरण के लिए:

MyActivity extends Activity{ 

private static final String TAG = "MyActivity"; 

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

मेरी कक्षा LogWrapper मूल रूप से निम्नलिखित

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

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

करता है तो सब मुझे क्या करना वर्ग के टैग के लिए एक स्थिर टैग पहले जोड़ें रहा है। कारण यह है कि मैं अपने आवेदन लिखने वाले लॉग स्टेटमेंट्स द्वारा लॉगकट आउटपुट फ़िल्टर करना चाहता हूं और सिस्टम या अन्य अनुप्रयोगों से लॉग के साथ अपने लॉगफाइल को छेड़छाड़ से बचने के लिए।

इसलिए मैं इस तरह लॉग्स प्राप्त करने के साथ आया था:

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

हालांकि, मैं एक खाली लॉगफ़ाइल साथ खत्म। जो मुझे रेगेक्स अभिव्यक्ति "com.myapp : I" काम नहीं करता है। मैंने क्षुद्रग्रह को छोड़ने की भी कोशिश की () लेकिन यह न तो काम करता है। हालांकि अगर मैं "*: I" का उपयोग करता हूं जो काम करता है।

जो मुझे आश्चर्यचकित करता है, भले ही यह एक संपूर्ण टैग नाम से फ़िल्टर करना संभव हो? क्या कोई तरीका है कि मैं एक लॉग पकड़ सकता हूं जिसे "com.myapp" द्वारा फ़िल्टर किया गया है। ?

मुझे लगता है कि योजना बी अगर लाइन मेरी टैग है, जबकि पाश में मैं जाँच करें कि सकता है और यह संलग्न है कि केवल यदि यह मामला है, लेकिन मैं वास्तव में उस से बचना चाहते हो सकता है ...

उत्तर

2

इस मुद्दे को हल करने के लिए ठीक है मैंने योजना बीआई के लिए मेरे पहले पोस्ट में संकेत दिया है कि अधिक सुरुचिपूर्ण (और अभी भी अज्ञात) समाधान छोड़ दिया है। मैं निम्नलिखित regex का उपयोग लॉगफ़ाइल कि मैं आदेश logcat -d -v समय * का उपयोग कर प्राप्त की प्रत्येक पंक्ति फिल्टर करने के लिए: मैं (Runtime.getRuntime() कार्यकारी (आदेश) का उपयोग कर मार डाला।):

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

ऊपर regex से मेल खाता इस तरह के बयानों के लिए लॉग इन:

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

[डेवी] का मतलब है कि, लॉग स्तर होना चाहिए या तो डी में (ebug), ई (rror), डब्ल्यू (arning) या मैं (NFO) रेगेक्स मैच के लिए आदेश। यदि आप वी (एर्बोस) लॉगिंग को भी निकालना चाहते हैं, तो बस "वी" जोड़ें।

संबंधित मुद्दे