安卓系统:使用正则表达式通过标记过滤Logcat



当记录我的标签时,总是这样:

com.myapp.SomeActivity

对于每一条日志语句,我都会在进行日志调用的类的Tag前面加上第一部分"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.:I"不起作用。我也试着省略星号(),但都不起作用。但是,如果我使用"*:I",则有效。

这让我想知道,是否只能通过一个完整的标签名称进行过滤?有没有一种方法可以让我获得一个经过"com.myapp"过滤的日志?

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

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

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

上面的正则表达式匹配如下日志语句:

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

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

最新更新