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

6

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

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.:I"是无效的。我也试过省略星号(),但那也不起作用。不过,如果我使用"*:I",那就可以工作。
这让我想知道,是否只能按完整标签名称进行过滤? 是否有办法获取过滤为"com.myapp."的日志呢?
我猜备选方案是,在while循环中检查行是否包含我的标签,并仅在这种情况下追加它,但我真的很想避免这种情况...
1个回答

2

为了解决这个问题,我放弃了更优雅(但仍未知)的解决方案,转而采用我在第一篇帖子中提到的备选方案B。我使用以下正则表达式来过滤每行日志文件,该日志文件是使用命令logcat -d -v time *:I获取的(使用Runtime.getRuntime().exec(command)执行):

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

上述正则表达式匹配类似于以下日志语句:
I/com.myapp.MyClass Crashed and did not recover - too bad.

[DEWI]表示日志级别必须是D(调试),E(错误),W(警告)或I(信息)才能匹配正则表达式。如果您想提取详细的日志记录,只需添加“V”即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接