본문 바로가기
IT 이야기/Android

Android EventLog 출력정보의 의미

by KaySeo 2021. 1. 19.
반응형

최근 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

 

※ 참고자료

android.googlesource.com/platform/frameworks/base/+/kitkat-release/services/java/com/android/server/am/EventLogTags.logtags

 

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

 

반응형