过滤日志输出
每一条日志消息都有一个Priority/Tag
优先级是下面的字符,顺序是从低到高:
V — 明细 (最低优先级)
D — 调试
I — 信息
W — 警告
E — 错误
F — 严重错误
S — 无记载 (最高优先级,没有什么会被记载)
通过运行logcat ,可以获得一个系统中使用的标记和优先级的列表,观察列表的前两列,给出的格式是<priority>/<tag>。
过滤器可以限制系统只输出感兴趣的标记-优先级组合。
过滤器表达式的格式是tag:priority ... ,其中tag是标记, priority是最小的优先级, 该标记标识的所有大于等于指定优先级的消息被写入日志。也可以在一个过滤器表达式中提供多个这样的过滤,它们之间用空格隔开。
下面给出的例子是仅输出标记为“RIL”并且优先级大于等于“Info”和标记为“GSM”并且优先级大于等于“Debug”的日志:
adb logcat RIL:I GSM:D *:S
上述表达式最后的 *:S
用于设置所有标记的日志优先级为S,这样可以确保仅有标记为“RIL”和“GSM”的日志被输出,使用 *:S
是可以确保输出符合指定的过滤器设置的一种推荐的方式,这样过滤器就成为了日志输出的“白名单”。
只显示需要的输出,白名单
最方便的当然是通过管道使用 grep 过滤了,这样可以使用 grep 强大的正则表达式匹配(简单的匹配一行当中的某个字符串).例如 MyApp:
adb logcat | grep MyApp
adb logcat | grep -i myapp #忽略大小写
如果在开发用电脑上运行 logcat
(相对于运行运程shell而言),也可以通过ANDROID_LOG_TAGS
环境变量设置默认的过滤器表达式:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
需要注意的是,如果是在远程shell或是使用adb shell logcat
命令运行logcat
,ANDROID_LOG_TAGS
不会导出到模拟器或手机设备上。