最近在項(xiàng)目中遇見(jiàn)一個(gè)問(wèn)題,在日志打印的過(guò)程中,發(fā)現(xiàn)某些日志不打印出來(lái),這里給大家看看
image
看到這里是不是感覺(jué)很奇怪,在同一個(gè)地方,為什么有些日志打印,有些日志不打???
后來(lái)我做了個(gè)實(shí)驗(yàn),一個(gè)一個(gè)字嘗試過(guò)去,結(jié)果如下:

image
看到這里其實(shí)基本已經(jīng)結(jié)案,就是發(fā)現(xiàn) IMS開(kāi)頭的日志都不會(huì)顯示
為什么不會(huì)顯示呢?我們來(lái)看一段Logger系統(tǒng)的源碼。
int __android_log_buf_write(int bufID, int prio, const char *tag, const char *msg)
{
struct iovec vec[3];
char tmp_tag[32];
if (! tag) tag = "";
if ((bufID != LOG_ID_RADIO) &&
(!strcmp(tag, "HTC_RIL") ||
(!strncmp(tag, "RIL", 3)) ||
(!strncmp(tag, "IMS", 3)) ||
!strcmp(tag, "AT") ||
!strcmp(tag, "GSM") ||
!strcmp(tag, "STK") ||
!strcmp(tag, "CDMA") ||
!strcmp(tag, "PHONE") ||
!strcmp(tag, "SMS"))) {
bufID = LOG_ID_RADIO;
snprintf(tmp_tag, sizeof(tmp_tag), "use-Rlog/RLOG-%s", tag);
tag = tmp_tag;
}
看到這里其實(shí)大家已經(jīng)明白了,其實(shí)是當(dāng)匹配到這些字符串的時(shí)候,會(huì)唄一個(gè)tmp_tag的替代了,而tmp_tag只是進(jìn)行了申請(qǐng)內(nèi)存,內(nèi)容全是空的。所以導(dǎo)致logCat打印不出來(lái)。
End. 其實(shí)解決方案很簡(jiǎn)單,在TAG中,要盡量避免這些字符串。
559259945 加群交流