Log标签显示异常:为何未随每条日志信息对应展示?
这其实是Android Logcat的自动分组优化机制在搞鬼,不是你的代码有问题哦!
背后的原因
Logcat为了让日志界面更简洁,会对连续输出的日志做自动分组:当多条日志满足以下条件时,会被合并成一个组,只在组的第一条显示完整的标签(tag)、优先级等信息,后续的日志会省略重复的部分:
- 使用完全相同的tag(你的例子里就是
"Resulted String") - 日志优先级相同(都是
Log.i的Info级别) - 来自同一个进程和线程
你看到的不同运行情况差异,是因为日志输出的时机:
- 首次运行时,循环里的日志是快速连续输出的,Logcat把它们归为同一个组,所以只显示一次标签;
- 后续运行时,可能因为系统负载变化、线程调度延迟,甚至中间有其他后台日志插入(哪怕你没在当前过滤条件下看到),导致分组被打断,所以标签会在新的分组开头重新显示。
如何让每条日志都显示标签?
如果你需要每条日志都完整显示标签,有两种简单的解决办法:
给标签添加唯一标识
修改循环里的日志语句,把循环索引加入tag,让每条日志的tag都不一样:for (int i = 0; i < Response.size(); i++){ Log.i("Resulted String #" + i, Response.get(i)); }关闭Logcat的自动分组功能
在Android Studio的Logcat面板右上角,找到「Group by tag/pid」的按钮(图标是两个堆叠的矩形),点击它取消分组模式,这样所有日志都会完整显示tag信息,不会被合并。
附你的原始代码与日志示例
原始代码
for (int i = 0; i < Response.size(); i++){ Log.i("Resulted String", Response.get(i)); }
首次运行日志输出
Resulted String: StatusOK
Amount2500.00score983
CAR25.00score773
LAR2200.00score780
Codeline.125000024._81922_767,_1127score993
PayeeNameGscore23
DateMay5,2018score925
CheckNumber1127score1000
后续运行日志输出
Resulted String: StatusOK
Amount2500.00score983
CAR25.00score773
LAR2200.00score780
Codeline.125000024._81922_767,_1127score993
PayeeNameGscore23
Resulted String: DateMay5,2018score925
CheckNumber1127score1000
Resulted String: StatusOK
Amount2500.00score983
CAR25.00score773
Resulted String: LAR2200.00score780
Codeline.125000024._81922_767,_1127score993
PayeeNameGscore23
DateMay5,2018score925
CheckNumber1127score1000
内容的提问来源于stack exchange,提问作者jellybean




