Android系统LOG分析

    xiaoxiao2021-12-15  36

    上层log我们主要关注events_log,main_log,radio_log和sys_log。这几个log的类型在alps/framework/base/core/java/android/util/Log.java中定义:     /** @hide */ public static final int LOG_ID_MAIN = 0;     /** @hide */ public static final int LOG_ID_RADIO = 1;     /** @hide */ public static final int LOG_ID_EVENTS = 2;     /** @hide */ public static final int LOG_ID_SYSTEM = 3;     /** @hide */ public static final int LOG_ID_CRASH = 4; events_log,记录的是系统级别的events,比如GC、ActivityManager的状态、ANR和lowmemory等。 01-01 02:05:03.835   842  1985 I am_proc_start: [0,2968,10011,com.android.managedprovisioning,broadcast,com.android.managedprovisioning/.BootReminder] 上面是从events_log随机抽取的,按列依次是时间、报告log的进程id、线程id、log级别是Info、events log tag,后面的信息就根据tag定义的不同而不同了。 tag来自于/system/etc/event-log-tags,如am_proc_start的定义为:     30014 am_proc_start (User|1|5),(PID|1|5),(UID|1|5),(Process Name|3),(Type|3),(Component|3) 这样上述tag之后的信息就明确了,0是User id,2968是start的应用的PID,10011是start的应用的UID,start的应用的进程名为,com.android.managedprovisioning,启动类型为broadcast,即因为接收到广播而启动的,启 动的Component Name为com.android.managedprovisioning/.BootReminder。 而如何将这一句log与代码中对应起来呢,就需要明白event-log-tags的生成过程。 alps/frameworks/base/services/core/java/com/android/server/am/EventLogTags.logtags会被编译生成 alps/out/target/common/obj/JAVA_LIBRARIES/services.core_intermediates/src/java/com/android/server/am/EventLogTags.java,/system/etc/event-log-tags是代码中EventLogTags.logtags的汇总, EventLogTags.java是为了参与Java文件的编译,am_proc_start在EventLogTags.java中对应为:     /** 30014 am_proc_start (User|1|5),(PID|1|5),(UID|1|5),(Process Name|3),(Type|3),(Component|3) **/ public static final int AM_PROC_START = 30014 代码中打印该条log的地方(ActivityManagerService.java的startProcessLocked()方法):     EventLog.writeEvent(EventLogTags.AM_PROC_START,                     UserHandle.getUserId(uid), startResult.pid, uid,                     app.processName, hostingType,                     hostingNameStr != null ? hostingNameStr : ""); 分析events_log需要熟悉常用的tag,上述过程可以将tag与代码对应起来。 main_log,不多讲,最普通最基础最常用的log。 sys_log,顾名思义,system log,一般是framework层的log,核心服务之类的,代码中调用的log打印类为Slog。 radio_log,RIL层相关的log,涉及到通话、网络切换、信号、短信、数据业务等,代码中调用的log打印类为Rlog。
    转载请注明原文地址: https://ju.6miu.com/read-1000028.html

    最新回复(0)