frameworks 之 日志打印
- 1. 常见日志类型
- 2. 动态日志ProtoLog
讲解 anddroid 日志打印类型。
1. 常见日志类型
android 日志类型分为 6 类 分别为 main,system, radio, events, crash, kernel
查看帮助指令
adb shell logcat --help
- main: 用于存储大多数应用和系统组件的日志信息。当你不指定缓冲区时,logcat 默认会从这个缓冲区读取日志
- system: 这个缓冲区包含来自系统级别的日志消息,通常涉及系统进程和守护进程,这些信息通常比 main 缓冲区中的更为底层。
- events:这个缓冲区记录了系统事件日志,如系统启动、关闭、以及应用程序的启动和终止等。这些日志通常以时间戳的形式记录
- crash:当应用程序或系统组件崩溃时,相关的崩溃报告会被记录到 crash 缓冲区中。这有助于开发者分析崩溃的原因
- kernel:缓冲区包含来自内核的日志消息。这些消息通常涉及硬件驱动程序、内存管理、进程调度等底层系统操作
可以通过 -b 指定对应的类型输出,默认是 all。
adb shell logcat -b main
system日志一般通过代码打印
Slog.i(TAG, "Restarting because process died: " + next);
evnets 日志一般通过代码,打印 而 EventLogTags 该类是生成的。一般可以通过日志的驼峰搜索,如 wm_resume。 一般可以搜索WmResume找到对应的打印。
EventLog.writeEvent(EventLogTags.AM_ANR, mApp.userId, pid, mApp.processName,mApp.info.flags, annotation);
EventLogTags.writeWmResumeActivity(next.mUserId, System.identityHashCode(next),next.getTask().mTaskId, next.shortComponentName);
2. 动态日志ProtoLog
ProtoLog 日志作为高版本新增日志打印方式,作用可以随时通过adb 控制输出或隐藏。通过adb 可以查看其使用方法
adb shell wm -h
常用使用的方法如下
命令 | 描述 |
---|---|
wm logging start | start proto logging 开始Proto log输出,让你enable的Group生效;输出到Logcat时不需要start |
wm logging stop | stop proto logging |
wm logging enable/disable [group…] | 按照groups启停ProtoLog,真正启动是start命令,调用start命令之后才输出 |
wm logging enable-text/disable-text [group…] | 启停动态日志,输出到logcat,不需要调用start命令就会开始输出 |
这里存在一个差别:enable和enable-text是有啥差别?
enable对应proto logging抓取会把日志写入到data/misc/wmtrace/路径下wm_log.winscope
enable-text对应就是logcat可以直接看到的,平时使用这个就ok了;
代码写法如下
ProtoLog.d(WM_DEBUG_STATES, "resumeTopActivity: Restarting %s", next);
比如我们想要查看对应的日志即可
adb shell wm logging enable-text WM_DEBUG_STATES