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
界面类型 命令行 命令行 图形化
按进程过滤 ✅ 自动 ❌ 需手动 ✅ 自动
颜色高亮 ✅ 按级别 ✅ 可自定义 ✅ 可自定义
日志持久化 ✅ 文件导出 ✅ 多种格式
日志统计
学习成本
适用场景 日常开发 日志展示 复杂问题排查

知识体系结构图

下面这张图展示了这三个工具在整个日志分析流程中的位置和关系:

Logcat 第三方工具知识体系 Android Logcat 原始日志 pidcat 按进程分组 · 轻量快速 logcat-color 颜色高亮 · 正则自定义 LogViewer 图形化 · 统计 · 书签 终端实时日志 彩色终端 / 文件导出 GUI 界面 / 多格式导出 核心目标:提升日志阅读效率,快速定位问题

避坑指南

最后,分享几个我踩过的坑:

  • pidcat 卡死问题:如果日志量太大,pidcat 可能会卡死。我曾经在调试一个每秒输出 500 条日志的 App 时,pidcat 直接无响应。解决方案是先用 -l WARN 限制日志级别,减少输出量。
  • logcat-color 中文乱码:Windows 下默认编码是 GBK,而 logcat-color 输出的是 UTF-8。设置终端编码为 UTF-8 即可解决。
  • LogViewer 内存占用:如果日志文件超过 100MB,LogViewer 可能会占用大量内存。建议先过滤再加载,或者分段查看。

嗯,这三个工具就介绍到这里。工具是死的,人是活的。关键是要找到最适合自己工作流的那个。我个人现在基本是 pidcat 和 LogViewer 换着用,看具体场景。

公众号:蓝海资料掘金营,微信deep3321