Android Studio Dolphin 新版Logcat 使用指南:告别混乱日志,高效定位问题

整理旧电脑上的一些笔记


前言

作为一名Android开发者,日志是我们最亲密的伙伴。笔者在今年9月以前频繁使用的Android Studio版本还是4.1.1,它发布于2020年11月。之所以还在坚持使用这么老的版本主要是由于笔者日常工作方向并非手机这类高性能移动端设备。

初识Dolphin版本Logcat

2022年9月Android发布了新版Android Studio------Dolphin(Android Studio Dolphin|2021.3.1(Sep 2022)),以下简称AS或Dolphin。

Android Studio的命名规则在2020开始,使用代号+版本号+发布月份的格式。如上面中"Dolphin"是代号,版本号2021.3.1是基于Intellij IDEA平台的版本,因为AS是基于Intellij IDEA进行的开发,Sep 2022是实际发布的日期。

Dolphin版本带来了全新的Logcat日志功能:新的UI界面,更加智能化,更高效(界面如下所示)。

Dolphin之前版本的Logcat日志采用文本流形式,可以提供一些基础功能,但各类信息混杂在一起输出,若日志量大时会很难定位问题,和我们在终端去执行adb logcat命令几乎一样,且会出现过滤失效、日志不打印输出。(界面如下所示)。

查看Dolphin版本Logcat

笔者当前使用的AS版本是Narwhal,它的默认Logcat界面如下:

新版Logcat默认置于左侧(点击切换到日志窗口。

每条日志都有相关日期、时间戳、进程和线程ID、标记(TAG)、包名、优先级和消息。通过上图我们可以看到标记TAG具有不同的颜色,可以更好帮助我们识别日志类型。

日志优先级

日志优先级和旧版相同:FATAL、ERROR、WARNING、INFO、DEBUG或VERBOSE。

🔴 提示

FATAL 实际上是 native 层崩溃(如 SIGSEGV)才会出现,Java 层崩溃通常为 ERROR + 堆栈。

日志换行设置

标准日志就是上面图中所示情况,每条日志在视图中保持一行,我们可以拖动下面的进度条查看更多信息,也可以使用Soft-Wrap来进行换行显示。

日志格式配置设置

点击 Configure Logcat Formatting Options 可以进行日志格式切换,它包括三个选项:

  • Standard View:标准视图,显示完整字段。
  • Compact View:紧凑视图,节省空间。
  • Modify View:自定义视图,勾选你需要显示的字段(如隐藏 PID/TID 或添加 UID)。

Modify View 选项可以打开新的弹窗来设置你希望显示的信息。

更改日志信息配色

想要更改日志信息配色,可以到Android Studio > Settings > Editor > Color Scheme

  • info indicator:修改指示器颜色,I
  • info message:修改日志"消息内容(正文)"颜色,文本颜色。

多个标签页和分屏

点击New Tab图标可以创建多个独立Logcat标签页,右键支持重命名和重新排列。每个标签页可以连接到不同的设备或运行不同的查询语言,极大的方便了同时监控多个应用和查看不同日志流。

可以在一个标签页内将窗口拆分为上下或左右的面板,每个面板都支持独立设置设备、过滤器信息和视图。例如左屏看主APP日志,右屏看Service日志或第三方SDK日志。取消分屏,右键点击Close即可。

使用Dolphin版本Logcat

在了解了新版日志界面都包括哪些按钮后,下面我们就来学习使用新的日志查询。

键值对搜索

新版的Logcat查询语法使用类似键值对的查询语言,支持如下方式(常用):

  • tag:MainActivity,筛选Tag为MainActivity的日志。
  • package:com.xxx.xxx,筛选包名匹配的日志。
  • process:xxxx,筛选进程匹配的日志。
  • level:debug,与指定级别或更高级别的日志匹配。
  • message:主页,筛选消息正文内容包含"主页"的日志。
  • age:5m,筛选时间戳最近的日志,这里是过去5分钟内的日志。s代表秒,m代表分钟,h代表小时,d代表天。

Ctrl+Space,可以查看查询列表。

正则表达式

查询框支持正则表达式来进行过滤搜索。

支持否定的字段有:tag、package、message和line,否定使用"-"。例如:-tag:MainActivity。

正则表达式匹配通过在字段名后加"",例如:tag:.*Exception$,匹配以"Exception"结尾的任何Tag。

可以结合使用:-tag~:My.*Tag。

逻辑运算符和隐式逻辑运算符

查询语言支持由 &| 以及圆括号表示的 ANDOR 运算符。

(tag:foo | level:ERROR) & package:mine

上面的就是很明显的使用了逻辑运算符,我们还可以考虑使用隐式结构。先看示例:

复制代码
tag:foo tag:bar package:myapp

两个key=tag的项和一个key=package的项,它就等于:

shell 复制代码
(tag:foo | tag:bar) & package:myapp

总结就是:具有相同key的多个非否定key-value过滤器项视作OR,其他过滤项视作AND

特殊查询

内置了部分特殊语句查询:

  • package:mine,匹配当前打开项目中的任何包名。
  • is:crash,匹配应用崩溃日志。
  • is:stacktrace,匹配任何类似 Java 堆栈跟踪的日志条目。
  • age:5m,条目的时间戳进行匹配。

其他

  • APP Quality Insights工具,展示来自 Firebase Crashlytics 的崩溃数据。
  • 查看查询历史记录,点击查看历史记录。
  • 应用崩溃和重启,当 Logcat 发现您的应用进程已停止并重启时,会在输出中显示一条消息PROCESS ENDED或PROCESS STARTED。

结语

如果你还在使用 Android Studio 4.x 或手动 adb logcat 查看日志,强烈建议升级至 Android Studio Giraffe、Hedgehog 或更高版本,全面体验新版 Logcat 带来的开发效率飞跃。

参考资料

相关推荐
Android-Flutter2 小时前
android Binder 应用层开发 详解
android·binder
文人sec16 小时前
MySQL主库出问题了,从库怎么办?备库为什么会延迟好几个小时?
android·数据库·mysql
hai_android16 小时前
不用 AIDL,手把手教你手写 Binder 代理类
android·kotlin
mmsx17 小时前
osmdroid 地图实战 03|地图的"分层世界":离线方案、图层模型与 Overlay 体系
android·前端
张文是假的啊18 小时前
IOC依赖注入问题:@Primary 和 @Qualifier的使用
android
换元不配限18 小时前
ConstraintLayout核心用法详解(三):引导线、屏障、组和占位
android·placeholder·barrier·约束布局·guideline
心平气和量大福大20 小时前
android studio(AS)工具-调试-统计总行数
android·ide·android studio
你的坚定21 小时前
SurfaceFlinger合成一帧的完整流程
android
爱笑鱼1 天前
Android 系统启动机制(七):进入 SystemServer.main() 以后,system_server 还是一个空进程吗?
android·linux