记录我的标签时,总是如下所示:
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循环中我可以检查该行是否包含我的标签,并且只有在这种情况下才附加它,但我真的想避免这种情况。
答案 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”。