【用法总结】抓取main_log、events_log、kernel_log日志的方法
做应用开发大部分时候都基础的logcat日志,其实android系统本身提供的不仅有logcat日志,还有events、kernel日志。
Android 底层有几个“log buffer”(缓冲区):
- main:普通应用/系统日志(默认)
- system:系统组件日志
- events:事件日志(EventLog)
- radio:通信相关
- 还有 crash 等(新版本)
| Buffer | 参数 | 内容 |
|---|---|---|
| main | -b main |
普通应用日志(Log.d/i/e 等) |
| system | -b system |
系统服务相关日志 |
| events | -b events |
EventLog 事件(二进制事件转文本) |
| radio | -b radio |
电话/基带相关 |
| crash | -b crash |
崩溃日志 |
| kernel | -b kernel |
内核日志(部分版本) |
logcat 本质是从这些 buffer 里读数据的一个工具。
命令如下:
logcat # 默认从 main + system + crash 等读取
logcat -b main # 只看 main buffer
logcat -b events # 只看 events buffer
一、抓取main.log日志
adb logcat -b main -v time > main.log
示例:
通过main.log日志就能分析日常应用的问题,或者framework层的问题。
二、抓取events日志的方法:
adb logcat -b events -v time > events.txt
示例:
通过events.log 事件日志,能分析页面的启动,各种生命周期,应用进程的启动、kill过程等,平时分析anr、进程无故退出、等锁等问题需要用到events日志的。
2.1 查看发生anr前后日志
关键字:am_anr 找到这个关键字的日志行,然后分析发生前后的组件生命周期状态就能初步定位anr发生的原因了
如果是no focus window、input disptach timeout等类型的ANR,则可以进一步查看关键字:input_focus,分析焦点的传递情况,看阻塞在哪一个步骤了
am_pss: 能看到进程占用的pss内存值
wm_/am_: wm_开头的能看到Activity生命周期的执行情况,也是很关键得分析信息
举例:
| events tag | 对应生命周期阶段 | 打印时机 | 是否代表生命周期执行完成 |
|---|---|---|---|
wm_create_task |
创建 Task | WMS 创建 Task 对象后立即记录 | ❌ 不是 Activity 创建完成 |
wm_task_created |
创建 Task | Task 创建完成后记录 | ✅ Task 已创建 |
wm_task_to_front |
Task 前台切换 | Task 被移动到前台时记录 | ❌ Activity 未必 resume |
wm_task_moved |
Task 顺序变化 | Task 在栈中移动时记录 | ❌ |
wm_create_activity |
Activity 创建阶段 | 创建 ActivityRecord 后记录,还没进入 Activity.onCreate | ❌ onCreate 未执行 |
am_create_activity |
AMS启动Activity | AMS 创建启动请求时记录 | ❌ onCreate 未执行 |
am_proc_start |
进程启动 | AMS 请求启动新进程时记录(fork前后) | ❌ Application未创建 |
am_proc_bound |
进程绑定 | 新进程 attach 到 AMS,Application绑定完成后记录 | ✅ 进程已可运行 |
wm_restart_activity |
Activity真正启动 | ATMS 调用 realStartActivity,准备发送生命周期事务 | ❌ onCreate未开始 |
wm_set_resumed_activity |
设置当前resume Activity | AMS/WMS设置 mResumedActivity 后记录 | ❌ onResume未完成 |
wm_on_create_called |
Activity.onCreate() |
进入 onCreate 调用时记录 | ❌ onCreate还没返回 |
wm_on_start_called |
Activity.onStart() |
进入 onStart 调用时记录 | ❌ onStart还没返回 |
wm_on_resume_called |
Activity.onResume() |
进入 onResume 调用时记录 | ❌ onResume还没返回 |
wm_on_top_resumed_gained |
Top Resume | onResume之后,系统确认该Activity成为top resumed时记录 | ✅ onResume阶段已完成一部分 |
wm_on_top_resumed_lost_called |
Top Resume丢失 | Activity失去top resumed状态时记录 | ❌ onPause未完成 |
wm_pause_activity |
Pause开始 | AMS通知旧Activity进入pause时记录 | ❌ onPause未开始/刚准备开始 |
wm_on_paused_called |
Activity.onPause() |
进入onPause调用时记录 | ❌ onPause未返回 |
wm_add_to_stopping |
Stop准备 | Activity进入stopping列表时记录 | ❌ onStop未执行 |
wm_stop_activity |
Stop开始 | AMS通知Activity stop时记录 | ❌ onStop未执行 |
wm_on_stop_called |
Activity.onStop() |
进入onStop调用时记录 | ❌ onStop未返回 |
wm_activity_launch_time |
首次启动完成 | Activity启动流程结束、认为已显示时记录 | ✅ 包含首帧显示完成 |
2.2 查看等锁日志
关键字:adb logcat -b events | grep dvm_lock_sample
不同位置日志信息含义:
2.3 查看低内存:am_low_memory、am_mem_factor、am_meminfo

三、抓取kernel日志的方法:
# 实时显示内核打印信息并保存到android_kmsg.log文件中
adb shell cat /proc/kmsg |tee android_kmsg.log
示例:

kernel日志,可以跟踪开机过程一些关键阶段,或者类似于比较底层的低内存查杀日志,比如:lowmemorykiller过程等。
例如:开机过程因为LMK机制导致系统应用被kill,导致冷启动劣化,会在内核的日志中搜索到lowmemorykiller关键字的日志
<6>[Fri May 22 14:40:26 2026] [ 47.712539] lowmemorykiller: Killing 'com.test.myapp' (3991) (tgid 3991), adj 0,\x0a to free 125180kB on behalf of 'RenderThread' (4753) because\x0a cache 12004kB is below limit 32768kB for oom_score_adj 0\x0a defrag_free 876kB\x0a Free memory is -32060kB above reserved
<6>[Fri May 22 14:40:26 2026] [ 47.712548] lowmemorykiller: Free cma:74476kB, file cma:146444kB
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)