Android EventLog 출력정보의 의미
최근 Android EventLog를 보는 일이 많은 데 출력되는 정보의 정확한 의미를 몰라 정리하는 차원에서 이 글을 작성합니다. 이 글은 ProgramSought 사이트의 "Android EventLog Meaning"글을 기본으로 하여 최근의 Android 내용을 업데이트 했습니다. 참고하세요.
1. 개요
Android 를 디버깅하고 분석하는 과정에서 현재 Activity 의 상태변화를 간단하고 정확히 보여주는 EventLog를 보는 것이 일반적입니다. 물론 window에 대한 정보는 없습니다. 이 글은 아래의 am 관련 tag들의 의미를 열거하고 있습니다.
이 글에 포함된 source class들은 EventLog.java, EventLogTags.java 파일에 있으며, tag 포맷은 /system/etc/event-log-tags 파일에 정의되어 있습니다.
터미널에서 아래와 같이 쳐보면:
이와 같은 많은 정보가 출력됩니다:
문자 그대로 am_create_service는 create a service,와 같이 많은 정보를 얻을 수 있지만, 괄호 안 정보의 구체적인 의미는 실제 더 의미가 있습니다. 그럼 그 의미를 보여주는 표를 살펴보겠습니다.
II. EventLog
2.1. ActivityManager
Num | TagName | format | Features |
30001 | am_finish_activity | User,Token,TaskID,ComponentName,Reason | |
30002 | am_task_to_front | User,Task | |
30003 | am_new_intent | User,Token,TaskID,ComponentName,Action,MIMEType,URI,Flags | |
30004 | am_create_task | User ,Task ID | |
30005 | am_create_activity | User ,Token ,TaskID ,ComponentName,Action,MIMEType,URI,Flags | |
30006 | am_restart_activity | User ,Token ,TaskID,ComponentName | |
30007 | am_resume_activity | User ,Token ,TaskID,ComponentName | |
30008 | am_anr | User ,pid ,Package Name,Flags ,reason | ANR |
30009 | am_activity_launch_time | User ,Token ,ComponentName,time | |
30010 | am_proc_bound | User ,PID ,ProcessName | |
30011 | am_proc_died | User ,PID ,ProcessName | |
30012 | am_failed_to_pause | User ,Token ,Wanting to pause,Currently pausing | |
30013 | am_pause_activity | User ,Token ,ComponentName | |
30014 | am_proc_start | User ,PID ,UID ,ProcessName,Type,Component | |
30015 | am_proc_bad | User ,UID ,ProcessName | |
30016 | am_proc_good | User ,UID ,ProcessName | |
30017 | am_low_memory | NumProcesses | Lru |
30018 | am_destroy_activity | User ,Token ,TaskID,ComponentName,Reason | |
30019 | am_relaunch_resume_activity | User ,Token ,TaskID,ComponentName | |
30020 | am_relaunch_activity | User ,Token ,TaskID,ComponentName | |
30021 | am_on_paused_called | User ,ComponentName | |
30022 | am_on_resume_called | User ,ComponentName | |
30023 | am_kill | User ,PID ,ProcessName,OomAdj ,Reason | Killing process |
30024 | am_broadcast_discard_filter | User ,Broadcast ,Action,ReceiverNumber,BroadcastFilter | |
30025 | am_broadcast_discard_app | User ,Broadcast ,Action,ReceiverNumber,App | |
30030 | am_create_service | User ,ServiceRecord ,Name,UID ,PID | |
30031 | am_destroy_service | User ,ServiceRecord ,PID | |
30032 | am_process_crashed_too_much | User ,Name,PID | |
30033 | am_drop_process | PID | |
30034 | am_service_crashed_too_much | User ,Crash Count,ComponentName,PID | |
30035 | am_schedule_service_restart | User ,ComponentName,Time | |
30036 | am_provider_lost_process | User ,Package Name,UID ,Name | |
30037 | am_process_start_timeout | User ,PID ,UID ,ProcessName | timeout |
30039 | am_crash | User ,PID ,ProcessName,Flags ,Exception,Message,File,Line | Crash |
30040 | am_wtf | User ,PID ,ProcessName,Flags ,Tag,Message | Wtf |
30041 | am_switch_user | id | |
30042 | am_activity_fully_drawn_time | User ,Token ,ComponentName,time | |
30043 | am_focused_activity | User ,ComponentName | |
30044 | am_home_stack_moved | User ,To Front ,Top Stack Id ,Focused Stack Id ,Reason | |
30045 | am_pre_boot | User ,Package | |
30046 | am_meminfo | Cached,Free,Zram,Kernel,Native | RAM |
30047 | am_pss | Pid, UID, ProcessName, Pss, Uss | process |
TAG가 사용되는 scene들은 아래 나열되었습니다:
- 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 lifecycle 연관 methods:
- 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_acitvity: AMS.setFocusedActivityLocked, clearFocusedActivity에 있습니다.
- am_restart_activty: ASS.realStartActivityLocked에 있습니다.
- am_create_activity: ASS.startActivityUncheckedLocked에 있습니다.
- am_new_intent: ASS.startActivityUncheckedLocked에 있습니다.
- am_task_to_front: AS.moveTaskToFrontLocked에 있습니다.
Window와 연관된:
- wm_task_moved: TaskStack.positionTask()에 있습니다.
- TaskId, toTop ? 1:0, position;
- 206, 1, 3은 TaskId=206이 stack의 top으로 이동한다는 의미입니다. 즉 stack의 길이는 4입니다.
- am_home_stack_moved: ASS.moveHomeStack에 있습니다.
- CurrentUser, toFront?1:0, homeStackId, FocusedStackId
- 0,1,0,0, 은 userId=0, home stack의 top 에서 StackId=0, 현재 focusedStackId=0, 를 의미합니다.
2.2. Power
Num | TagName | format | Features |
2722 | battery_level | level, voltage, temperature | |
2723 | battery_status | status,health,present,plugged,technology | |
2730 | battery_discharge | duration, minLevel,maxLevel | |
2724 | power_sleep_requested | wakeLocksCleared | Number of wake locks |
2725 | power_screen_broadcast_send | wakelockCount | |
2726 | power_screen_broadcast_done | on, broadcastDuration, wakelockCount | |
2727 | power_screen_broadcast_stop | which,wakelockCount | The system has not yet entered the ready state |
2728 | power_screen_state | offOrOn, becauseOfUser, totalTouchDownTime, touchCycles | |
2729 | power_partial_wake_state | releasedorAcquired, tag |
부분적인 의미:
- battery_level:[19,3660,352] // 남아있는 power는 19%, battery voltage는 3.66v, 그리고 battery 온도는 35.2ºC 입니다.
- power_screen_state:[0.3.0.0] //Off screen state (0), screen timeout(3), 물론 다른 장치의 관리 전략(1)도 있으며, user behavior(2) 도 있습니다.
- power_screen_state:[1,0,0,0] // 밝기 상태(1)
TAG가 사용되는 scene들은 아래 나열되었습니다:
- power_sleep_requested: PMS.goToSleepNoUpdateLocked에 있습니다.
- power_screen_state: Notifer.handleEarlyInteractiveChange, handleLateInteractiveChange에 있습니다.
III. EventLog 완전한 의미 분석
EventLogTags.java 소스코드에서는 많은 유사한 정의들이 있는데, 괄호안의 숫자의 의미는 무엇입니까? (process startup을 예로 들자면)
am_proc_start 바로 뒤에 오는 여러 대괄호는 아래와 같이 대괄호 형식으로 내용을 나타냅니다.
즉, (User|1|5)==> Name은 User, data type은 1, data unit은 5, 그럼 data type과 data unit에 대해서 살펴보겠습니다.
3.1. data type
- 1: init
- 2: long
- 3: string
- 4: list
data type에서 대부분 int와 string이 사용됩니다.
3.2. data unit
- 1: objects의 개수
- 2: bytes의 개수
- 3: milliseconds의 개수
- 4: allications의 개수
- 5: Id
- 6: 백분율
3.3. Instance Resolution
사전 지식을 바탕으로 다음 문장을 살펴보겠습니다.
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] |
문장의 의미는 다음과 같습니다:
Process startup: UserId=0, pid=9227, uid=10002, ProcessName=com.android.browser, data type=ContentProvider, component=com.android.browser/.provider.BrowserProvider2 |
※ 참고자료
services/java/com/android/server/am/EventLogTags.logtags - platform/frameworks/base - Git at Google
# See system/core/logcat/event.logtags for a description of the format of this file. option java_package com.android.server.am 2719 configuration_changed (config mask|1|5) 2721 cpu (total|1|6),(user|1|6),(system|1|6),(iowait|1|6),(irq|1|6),(softirq|1|6) #
android.googlesource.com
www.programmersought.com/article/6684616653/
Android EventLog meaning - Programmer Sought
I. Overview In the process of debugging and analyzing Android, it is more common to view the EventLog, which shows the various states of the current Activity very concisely and clearly. Of course, there is no information about the window. Then this article
www.programmersought.com
source.android.com/setup/contribute/read-bug-reports
버그 신고 읽기 | Android 오픈소스 프로젝트 | Android Open Source Project