Android:使用正则表达式按标记过滤Logcat

时间:2012-03-20 13:48:11

标签: android filter logcat

记录我的标签时,总是如下所示:

com.myapp.SomeActivity

对于每个日志语句,我在前面加上第一部分“com.myapp”。到正在进行日志调用的类的标记。例如:

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

所以我所做的就是在类的标签前面添加一个静态标签。原因是,我希望通过应用程序写入的Log语句过滤logcat输出,并避免使用来自系统或其他应用程序的日志来混乱我的日志文件。

因此我想出了这样的日志:

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。:我”不起作用。我也试过省略asterix(),但两者都没有。但是,如果我使用“*:I”有效。

这让我想知道,是否只能通过完整的标签名称进行过滤?有没有办法可以获取一个由“com.myapp”过滤的日志。 ?

我想计划B 就是在while循环中我可以检查该行是否包含我的标签,并且只有在这种情况下才附加它,但我真的想避免这种情况。

1 个答案:

答案 0 :(得分:2)

好的,为了解决这个问题,我放弃了我在第一篇文章中暗示的B计划中更优雅(但仍然未知)的解决方案。我使用以下正则表达式来过滤我使用命令 logcat -d -v time *:I 获得的日志文件的每一行(使用Runtime.getRuntime()。exec(command)执行):< / p>

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

上面的正则表达式匹配这样的日志语句:

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

[DEWI]意味着,日志级别必须是D(ebug),E(rror),W(arning)或I(nfo)才能使正则表达式匹配。如果你想提取V(erbose)日志记录,只需添加一个“V”。