2012-03-20 25 views
6

Khi đăng nhập Thẻ của tôi lúc nào cũng giống như thế này: "com.myapp"Android: Lọc Logcat bằng thẻ sử dụng regex

com.myapp.SomeActivity 

Đối với mỗi câu lệnh log Tôi thêm vào trước phần đầu tiên vào Thẻ của lớp đang thực hiện cuộc gọi nhật ký. Ví dụ:

MyActivity extends Activity{ 

private static final String TAG = "MyActivity"; 

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

lớp LogWrapper tôi về cơ bản nào sau đây

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

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

Vì vậy, tất cả tôi làm là thêm vào trước một khóa tĩnh vào thẻ của lớp. Lý do là, tôi muốn lọc đầu ra logcat bằng các câu lệnh Log mà ứng dụng của tôi viết và tránh làm lộn xộn logfile của tôi với các bản ghi từ hệ thống hoặc các ứng dụng khác.

Do đó tôi đã đưa ra lấy các bản ghi như thế này:

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

Tuy nhiên, tôi kết thúc với một logfile trống. Mà làm cho tôi điều biểu thức regex "com.myapp. : Tôi" không hoạt động. Tôi cũng đã cố gắng bỏ qua asterix () nhưng nó cũng không hoạt động. Tuy nhiên, nếu tôi sử dụng "*: I" hoạt động.

Điều gì khiến tôi tự hỏi, liệu chỉ có thể lọc theo tên thẻ hoàn chỉnh? Có cách nào tôi có thể giữ một nhật ký được lọc bởi "com.myapp". ?

tôi đoán kế hoạch B sẽ là trong vòng lặp trong khi tôi có thể kiểm tra nếu dòng chứa thẻ của tôi và thêm nó chỉ nếu đó là trường hợp, nhưng tôi thực sự muốn tránh điều đó ...

Trả lời

2

Ok để giải quyết vấn đề tôi đã từ bỏ giải pháp thanh lịch hơn (và vẫn chưa biết) cho Kế hoạch BI gợi ý trong bài viết đầu tiên của tôi. Tôi sử dụng regex sau để lọc mỗi dòng logfile mà tôi thu được bằng cách sử dụng lệnh logcat -d -v thời gian *: Tôi (thực hiện bằng Runtime.getRuntime() exec (lệnh).):

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

các trận đấu regex trên đăng tuyên bố như thế này:

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

các [Dewi] có nghĩa là, mức độ đăng nhập phải là D (ebug), E (rror), W (arning) hoặc I (nfo) trong để regex khớp. Nếu bạn muốn trích xuất V (erbose) đăng nhập là tốt, chỉ cần thêm một "V".

Các vấn đề liên quan