26、Logcat 与日志分析工具:pidcat、logcat-color、LogViewer 的使用
说实话,干 Android 开发这么多年,我跟 Logcat 打交道的时间,可能比跟我老婆说话的时间还多。你想想看,每天几百上千条日志刷屏,眼睛都快看瞎了。原生 Logcat 虽然能用,但说实话,体验真的一般。
今天我就跟你聊聊几个我常用的第三方日志工具。它们能帮你从海量日志里快速找到想要的信息。说白了,就是让日志阅读体验从「原始社会」进化到「现代社会」。
为什么需要第三方日志工具?
原生 Logcat 的问题,我总结了几点:
- 颜色单一:所有日志都是白底黑字,Verbose、Debug、Error 全靠看标签
- 过滤麻烦:每次都要手动敲
adb logcat -s TAG:V,手都酸了 - 多进程混乱:一个 App 可能有好几个进程,日志混在一起根本分不清
- 没有持久化:终端一关,日志就没了,想回头查都不行
嗯,这些问题,下面这几个工具基本都能解决。
核心观点:工具不是万能的,但好的工具能让你少加三天班。我个人习惯是,日常开发用 pidcat,调试复杂问题用 LogViewer,展示日志用 logcat-color。
pidcat:按进程过滤的日志神器
pidcat 是我最早接触的第三方日志工具。它的作者是 Jake Wharton,对,就是那个写 ButterKnife 的大神。
安装方式:
# 通过 pip 安装
pip install pidcat
# 或者直接从 GitHub 克隆
git clone https://github.com/JakeWharton/pidcat.git
cd pidcat
python pidcat.py
基本用法:
# 按包名过滤
pidcat com.example.myapp
# 指定日志级别(只显示 Error 及以上)
pidcat com.example.myapp -l ERROR
# 清除之前的日志
pidcat com.example.myapp -c
pidcat 最大的特点,就是它会自动按进程分组。每个进程的日志用不同颜色显示。我记得有一次排查一个多进程的崩溃问题,原生 Logcat 里三个进程的日志混在一起,根本理不清。换成 pidcat 之后,一眼就看出是子进程的 Binder 通信出了问题。
小技巧:pidcat 默认会过滤掉包名不匹配的日志。如果你想看系统日志,可以用 pidcat * 匹配所有进程。
logcat-color:让日志变得赏心悦目
logcat-color 是一个基于 Python 的工具,它的核心功能就是给日志上色。Verbose 灰色、Debug 蓝色、Info 绿色、Warning 橙色、Error 红色。你一眼就能看出哪些是重点。
安装方式:
pip install logcat-color
基本用法:
# 启动彩色日志
logcat-color
# 按标签过滤
logcat-color -s MyTag
# 保存日志到文件
logcat-color -f mylog.txt
logcat-color 还有一个我很喜欢的功能:正则高亮。你可以自定义某些关键词的颜色。比如我把 "ANR" 和 "FATAL" 标成红色加粗,这样一旦出现,我立马就能注意到。
# 自定义高亮规则
logcat-color --highlight "ANR:red:bold" --highlight "FATAL:red:bold"
为什么会这样?因为人眼对颜色的敏感度远高于文字。你想想看,几百行日志里,红色的一行是不是特别显眼?这就是 logcat-color 的设计哲学。
注意:logcat-color 依赖 Python 环境。如果你用的是 Windows,可能需要额外配置终端编码,否则中文日志可能会乱码。我曾经在这个坑里爬了半天,后来发现设置 chcp 65001 就能解决。
LogViewer:图形化日志分析利器
前面两个都是命令行工具,LogViewer 则是一个图形化工具。它基于 Electron 开发,界面类似 Chrome 开发者工具。
安装方式:
# 通过 npm 安装
npm install -g logviewer
# 或者下载桌面版
# https://github.com/nicklausw/logviewer/releases
核心功能:
- 实时日志流:自动连接 ADB,实时显示日志
- 多维度过滤:按进程、标签、级别、关键词过滤
- 日志书签:标记关键日志,方便回头查看
- 日志导出:支持导出为 TXT、CSV、HTML 格式
- 日志对比:可以对比两次运行的日志差异
我个人最喜欢的是它的「日志书签」功能。调试复杂 Bug 时,我会把关键日志打上书签,然后一次性导出。这样写 Bug 报告的时候,直接把书签日志贴上去,清晰明了。
LogViewer 还有一个隐藏功能:日志统计。它能统计每个标签出现的次数、每个级别的分布。有一次我怀疑某个模块在疯狂打日志,用 LogViewer 一统计,好家伙,那个模块每秒输出 200 条 Debug 日志,直接导致 UI 线程卡顿。
实战经验:我一般这样搭配使用——日常开发用 pidcat,因为它轻量、快速;需要展示日志给同事看时用 logcat-color,因为颜色清晰;排查复杂问题时用 LogViewer,因为它的过滤和统计功能强大。
工具对比总结
| 特性 | pidcat | logcat-color | LogViewer |
|---|---|---|---|
| 界面类型 | 命令行 | 命令行 | 图形化 |
| 按进程过滤 | ✅ 自动 | ❌ 需手动 | ✅ 自动 |
| 颜色高亮 | ✅ 按级别 | ✅ 可自定义 | ✅ 可自定义 |
| 日志持久化 | ❌ | ✅ 文件导出 | ✅ 多种格式 |
| 日志统计 | ❌ | ❌ | ✅ |
| 学习成本 | 低 | 低 | 中 |
| 适用场景 | 日常开发 | 日志展示 | 复杂问题排查 |
知识体系结构图
下面这张图展示了这三个工具在整个日志分析流程中的位置和关系:
避坑指南
最后,分享几个我踩过的坑:
- pidcat 卡死问题:如果日志量太大,pidcat 可能会卡死。我曾经在调试一个每秒输出 500 条日志的 App 时,pidcat 直接无响应。解决方案是先用
-l WARN限制日志级别,减少输出量。 - logcat-color 中文乱码:Windows 下默认编码是 GBK,而 logcat-color 输出的是 UTF-8。设置终端编码为 UTF-8 即可解决。
- LogViewer 内存占用:如果日志文件超过 100MB,LogViewer 可能会占用大量内存。建议先过滤再加载,或者分段查看。
嗯,这三个工具就介绍到这里。工具是死的,人是活的。关键是要找到最适合自己工作流的那个。我个人现在基本是 pidcat 和 LogViewer 换着用,看具体场景。