Skip to content

EventLog日志

前言:终端调试命令

shell
adb logcat -b events # 会打印出EventLog信息

一、ActivityManager

NumTagName格式功能
30001am_finish_activityUser, Token, TaskID, ComponentName, Reason
30002am_task_to_frontUser, Task
30003am_new_intentUser, Token, TaskID, ComponentName, Action, MIMEType, URI, Flags
30004am_create_taskUser, Task ID
30005am_create_activityUser, Token, TaskID, ComponentName, Action, MIMEType, URI, Flags
30006am_restart_activityUser, Token, TaskID, ComponentName
30007am_resume_activityUser, Token, TaskID, ComponentName
30008am_anrUser, pid, Package Name, Flags, reasonANR
30009am_activity_launch_timeUser, Token, ComponentName, time
30010am_proc_boundUser, PID, ProcessName
30011am_proc_diedUser, PID, ProcessName
30012am_failed_to_pauseUser, Token, Wanting to pause, Currently pausing
30013am_pause_activityUser, Token, ComponentName
30014am_proc_startUser, PID, UID, ProcessName, Type, Component
30015am_proc_badUser, UID, ProcessName
30016am_proc_goodUser, UID, ProcessName
30017am_low_memoryNumProcesses, Lru
30018am_destroy_activityUser, Token, TaskID, ComponentName, Reason
30019am_relaunch_resume_activityUser, Token, TaskID, ComponentName
30020am_relaunch_activityUser, Token, TaskID, ComponentName
30021am_on_paused_calledUser, ComponentName
30022am_on_resume_calledUser, ComponentName
30023am_killUser, PID, ProcessName, OomAdj, Reason杀进程
30024am_broadcast_discard_filterUser, Broadcast, Action, ReceiverNumber, BroadcastFilter
30025am_broadcast_discard_appUser, Broadcast, Action, ReceiverNumber, App
30030am_create_serviceUser, ServiceRecord, Name, UID, PID
30031am_destroy_serviceUser, ServiceRecord, PID
30032am_process_crashed_too_muchUser, Name, PID
30033am_drop_processPID
30034am_service_crashed_too_muchUser, Crash Count, ComponentName, PID
30035am_schedule_service_restartUser, ComponentName, Time
30036am_provider_lost_processUser, Package Name, UID, Name
30037am_process_start_timeoutUser, PID, UID, ProcessName,timeout
30039am_crashUser, PID, ProcessName, Flags, Exception, Message, File, LineCrash
30040am_wtfUser, PID, ProcessName, Flags, Tag, MessageWtf
30041am_switch_userid
30042am_activity_fully_drawn_timeUser, Token, ComponentName, time
30043am_focused_activityUser, ComponentName
30044am_home_stack_movedUser, To Front, Top Stack Id, Focused Stack Id, Reason
30045am_pre_bootUser, Package
30046am_meminfoCached, Free, Zram, Kernel, Native内存
30047am_pssPid, UID, ProcessName, Pss, Uss进程

tag可能使用的部分场景:

am_low_memory:位于AMS.killAllBackgroundProcesses或者AMS.appDiedLocked,记录当前Lru进程队列长度。
am_pss:位于AMS.recordPssSampleLocked
am_meminfo:位于AMS.dumpApplicationMemoryUsage
am_proc_start:位于AMS.startProcessLocked,启动进程
am_proc_bound:位于AMS.attachApplicationLocked
am_kill: 位于ProcessRecord.kill,杀掉进程
am_anr: 位于AMS.appNotResponding
am_crash:位于AMS.handleApplicationCrashInner
am_wtf:位于AMS.handleApplicationWtf
am_activity_launch_time:位于ActivityRecord.reportLaunchTimeLocked(),后面两个参数分别是thisTime和 totalTime.
am_activity_fully_drawn_time:位于ActivityRecord.reportFullyDrawnLocked, 后面两个参数分别是thisTime和 totalTime
am_broadcast_discard_filter:位于BroadcastQueue.logBroadcastReceiverDiscardLocked
am_broadcast_discard_app:位于BroadcastQueue.logBroadcastReceiverDiscardLocked

Activity生命周期相关的方法:

am_on_resume_called: 位于AT.performResumeActivity
am_on_paused_called: 位于AT.performPauseActivity, performDestroyActivity
am_resume_activity: 位于AS.resumeTopActivityInnerLocked
am_pause_activity: 位于AS.startPausingLocked
am_finish_activity: 位于AS.finishActivityLocked, removeHistoryRecordsForAppLocked
am_destroy_activity: 位于AS.destroyActivityLocked
am_focused_activity: 位于AMS.setFocusedActivityLocked, clearFocusedActivity
am_restart_activity: 位于ASS.realStartActivityLocked
am_create_activity: 位于ASS.startActivityUncheckedLocked
am_new_intent: 位于ASS.startActivityUncheckedLocked
am_task_to_front: 位于AS.moveTaskToFrontLocked

二、Power

NumTagName格式功能
2722battery_levellevel, voltage, temperature电池电量、电压、温度信息
2723battery_statusstatus, health, present, plugged, technology电池状态、健康状况、是否插入、充电状态、电池类型
2730battery_dischargeduration, minLevel, maxLevel电池放电持续时间、最小电量水平、最大电量水平
2724power_sleep_requestedwakeLocksCleared睡眠请求,唤醒锁已清除的数量
2725power_screen_broadcast_sendwakelockCount屏幕广播发送,涉及的唤醒锁计数
2726power_screen_broadcast_doneon, broadcastDuration, wakelockCount屏幕广播完成,屏幕状态(开/关)、广播持续时间、唤醒锁计数
2727power_screen_broadcast_stopwhich, wakelockCount屏幕广播停止,停止原因、涉及的唤醒锁计数,系统未完全就绪
2728power_screen_stateoffOrOn, becauseOfUser, totalTouchDownTime, touchCycles屏幕开关状态、是否因用户操作、总触控按下时间、触控周期数
2729power_partial_wake_statereleasedorAcquired, tag部分唤醒状态变更,释放或获取、标签标识

battery_level: [19,3660,352] //剩余电量19%, 电池电压3.66v, 电池温度35.2℃
power_screen_state: [0,3,0,0] // 灭屏状态(0), 屏幕超时(3). 当然还有其他设备管理策略(1),其他理由都为用户行为(2)
power_screen_state: [1,0,0,0] // 亮屏状态(1)

列举tag可能使用的部分场景:

power_sleep_requested: 位于PMS.goToSleepNoUpdateLocked
power_screen_state:位于Notifer.handleEarlyInteractiveChange, handleLateInteractiveChange

三、EventLog完整语义分析

在源码EventLogTags.java中,有大量类似的定义,那么括号中数字是什么含义呢? (以进程启动为例)

txt
30014 am_proc_start (User|1|5),(PID|1|5),(UID|1|5),(Process Name|3),(Type|3),(Component|3)

am_proc_start之后紧跟着的几个括号,其中括号里的内容格式如下:

txt
(<name>|data type[|data unit])
(<名字>|数据类型[|数据单位])

四、数据类型

1: int 2: long 3: string 4: list

五、数据单位

1: Number of objects(对象个数) 2: Number of bytes(字节数) 3: Number of milliseconds(毫秒) 4: Number of allocations(分配个数) 5: Id 6: Percent(百分比)

六、实例解析

txt
am_proc_start (User|1|5),(PID|1|5),(UID|1|5),(Process Name|3),(Type|3),(Component|3)
am_proc_start: [0,9227,10002,com.android.browser,content provider,com.android.browser/.provider.BrowserProvider2]

含义如下

进程启动: UserId=0, pid=9227, uid=10002, ProcessName=com.android.browser, 数据类型=ContentProvider, 组件=com.android.browser/.provider.BrowserProvider2

events_log中搜索“am_finish_activity”, 可以判断到底是APP自行结束的(正常结束,后面有app-request字样),还是被其他进程强制结束的(force-stop)

Released under the MIT License.