当标签以“IMS“开头时,为什么Logcat不打印日志?

当标签以“IMS"开头时,为什么Logcat不打印日志?

一、 问题描述

为什么Logcat以IMS"开头时Logcat不打印日志?

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.btnOne:
            System.out.println("Button One log by sout");
            Log.e("IMSfsadfasdfasdf", "log by Log.e()");
            break;
        case R.id.btnTwo:
            System.out.println("Button Two log by sout");
            Log.e("MService", "log by Log.e()");
            break;
    }
}

日志:

04-07 15:05:48.838 4363-4363/com.licheedev.myapplication I/System.out:
Button One log by sout 04-07 15:05:49.916
4363-4363/com.licheedev.myapplication I/System.out: Button Two log by
sout 04-07 15:05:49.916 4363-4363/com.licheedev.myapplication
E/MService: log by Log.e() 04-07 15:05:54.109
4363-4363/com.licheedev.myapplication I/System.out: Button Two log by
sout 04-07 15:05:54.109 4363-4363/com.licheedev.myapplication
E/MService: log by Log.e() 04-07 15:05:54.822
4363-4363/com.licheedev.myapplication I/System.out: Button One log by
sout 04-07 15:05:55.638 4363-4363/com.licheedev.myapplication
I/System.out: Button One log by sout

二、分析

Android 的日志机制中的这行代码有关.这是在函数 __android_log_write(prio, tag, buf);

/* XXX: This needs to go! */
if (!strcmp(tag, "HTC_RIL") ||
    !strncmp(tag, "RIL", 3) || /* Any log tag with "RIL" as the prefix */
    !strncmp(tag, "IMS", 3) || /* Any log tag with "IMS" as the prefix */
    !strcmp(tag, "AT") ||
    !strcmp(tag, "GSM") ||
    !strcmp(tag, "STK") ||
    !strcmp(tag, "CDMA") ||
    !strcmp(tag, "PHONE") ||
    !strcmp(tag, "SMS")) {
        log_id = LOG_ID_RADIO;
        // Inform third party apps/ril/radio.. to use Rlog or RLOG
        snprintf(tmp_tag, sizeof(tmp_tag), "use-Rlog/RLOG-%s", tag);
        tag = tmp_tag;
}

函数判断了传入参数的合法合理性,进行处理后,将参数打包传递给结构体iovec,同时将bugID,以及打包好的iovec作为参数传递给write_to_log。

要稍微注意下,如果tag包含HTC_RIL, RIL, IMS, AT, GSM, STK, CDMA, PHONE, SMS, (这些都是涉及到radio),就将bugID设置为LOG_ID_RADIO。将不同的类型归属到不同的缓冲区中。

三、解决办法:

方法一:
app中更改打印log的TAG,避免这些字符:HTC_RIL, RIL, IMS, AT, GSM, STK, CDMA, PHONE, SMS

方法二:
使用radio log可以看到对应的log:

抓取Android RIL层 log,在调试Android通信方面的代码时,这个Log非常关键。抓取命令如下:

adb logcat -b radio >e://radio.log
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Johnny2004

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值