Android系统LOG分析

上层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。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值