简介:

本文介绍如何在 shell 命令行中过滤 adb logcat 输出的几个小技巧。

开发当中经常看到别人的 log 如洪水般瞬间刷满了屏幕,对自己有用的信息都被淹没了,影响心情也影响效率。下面是几个我所知道的过滤方法。

1. 只显示需要的输出,白名单

最方便的当然是通过管道使用 grep 过滤了,这样可以使用 grep 强大的正则表达式匹配。简单的匹配一行当中的某个字符串,例如 MyApp:

adb logcat | grep MyApp
adb logcat | grep -i myapp #忽略大小写。
adb logcat | grep --color=auto -i myapp #设置匹配字符串颜色。更多设置请查看 grep 帮助。

进阶一点可以使用 grep 的正则表达式匹配。例如上一个例子会匹配一行中任意位置的 MyApp,可以设置为仅匹配 tag。默认的 log 输出如下,如果修改过输出格式相应的表达式也要修改。

I/CacheService(  665): Preparing DiskCache for all thumbnails.

可以看出 tag 是一行开头的第三个字符开始,根据这点写出表达式:

adb logcat | grep "^..MyApp"

根据这个格式也可以设置只显示某个优先级的 log,再匹配行首第一个字符即可。例如仅显示 Error 级别 tag 为 MyApp 的输出:

adb logcat | grep "^E.MyApp"

当然也可以匹配多个,使用 | 分割多个匹配表达式,要加转义符。例如要匹配 tag 为 MyApp 和 MyActivity 的输出:

adb logcat | grep "^..MyApp\|^..MyActivity"
adb logcat | grep -E "^..MyApp|^..MyActivity" #使用 egrep 无须转义符

2. 过滤不需要的输出,黑名单

还是使用 grep,用法也跟上面的一样,加一个 -v 即可。例如要过滤 tag 为 MyApp 和 MyActivity 的输出:

adb logcat | grep -v "^..MyApp\|^..MyActivity"
adb logcat | grep -vE "^..MyApp|^..MyActivity" #使用 egrep 无须转义符

3. 显示同一个进程的所有输出

有时一个程序里面的 tag 有多个,需要输出该程序(同一个 PID)的所有 tag;仅使用 tag 过滤有时也会漏掉一些错误信息,而一般错误信息也是和程序同一个 PID。还是通过 grep 实现,思路是先根据包名找到 pid 号,然后匹配 pid。写成 shell 脚本如下,参数是程序的 java 包名(如 com.android.media)。

1 #!/bin/bash
2 packageName=$1
3 pid=`adb shell ps grep $packageName | awk '{print $2}'`
4 adb logcat | grep --color=auto $pid

4. 从当前开始显示

logcat 有缓存,如果仅需要查看当前开始的 log,需要清空之前的。

adb logcat -c && adb logcat

5. 过滤 log 文件

有时需要分析 log 文件,过滤 log 文件还是使用 grep。例如 log 文件为 myapp.log,要匹配 tag 为 MyApp 和 MyActivity 的输出,然后输出到 newmyapp.log:

cat myapp.log | grep "^..MyApp\|^..MyActivity" > newmyapp.log

Windows 下推荐使用 Notepad++,一个免费强大的记事本,支持正则表达式查找替换。可以高亮显示匹配内容,也可以删除不需要的内容。

以上的技巧主要用到了 grep,其实 logcat 本身也有过滤功能,可以根据 tag、优先级过滤 log,具体请参考 Android 官方文档 Reading and Writing Logs。如果喜欢使用图形界面,请参考Using DDMS,DDMS 里面的 logcat 也可以同样过滤。

最新文章

  1. python sokct 包详解
  2. 2016-12-21(1)Git常用命令总结
  3. Oracle 表分组 group by和模糊查询like
  4. Context.js 右键菜单
  5. 使用DataSet Datatable 更新数据库的三种方式
  6. Bluetooth 4.0之Android 讲解
  7. Tomcat error: A child container failed during start
  8. 拿到手机ip住址
  9. http Post 请求一网络资源返回字符串
  10. Java中的字面量
  11. Some 3D Graphics (rgl) for Classification with Splines and Logistic Regression (from The Elements of Statistical Learning)(转)
  12. 【原创】无线破解Aircrack-ng套件详解--airmon-ng与airodump-ng
  13. nautilus-open-terminal----在当前目录下打开终端
  14. ORACLE根据两个表都含有的字段条件来判断两个表连接后有没有数据
  15. 机器学习入门16 - 多类别神经网络 (Multi-Class Neural Networks)
  16. linux软连接
  17. tailor+ skipper 实现micro-frontends 简单试用
  18. Java微信二次开发(二)
  19. 开始试用Dynamics 365
  20. Windows执行命令与下载文件总结

热门文章

  1. SqlServer作业指定目标服务器
  2. innerHTML和outerHTML的区别
  3. hdu-1757 A Simple Math Problem---矩阵快速幂模板题
  4. Android(java)学习笔记91:Eclipse中代码提示去掉@override,不然就报错!
  5. netbackup :nbu备份 Hyper-V 遇到快照错误(状态码 156)
  6. Mac 系统 + Chrome浏览器 网页前端出现中文文字反转或顺序错乱
  7. (转)国内外优秀的Web前端工程师
  8. ARC机制中的Strong和weak
  9. FTP、SFTP与FTPS
  10. 对比传统方式访问数据库和SpringData访问数据库