You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Log标签显示异常:为何未随每条日志信息对应展示?

为什么Logcat中我的日志标签没有随每条字符串一同显示?

这其实是Android Logcat的自动分组优化机制在搞鬼,不是你的代码有问题哦!

背后的原因

Logcat为了让日志界面更简洁,会对连续输出的日志做自动分组:当多条日志满足以下条件时,会被合并成一个组,只在组的第一条显示完整的标签(tag)、优先级等信息,后续的日志会省略重复的部分:

  • 使用完全相同的tag(你的例子里就是"Resulted String"
  • 日志优先级相同(都是Log.i的Info级别)
  • 来自同一个进程和线程

你看到的不同运行情况差异,是因为日志输出的时机:

  • 首次运行时,循环里的日志是快速连续输出的,Logcat把它们归为同一个组,所以只显示一次标签;
  • 后续运行时,可能因为系统负载变化、线程调度延迟,甚至中间有其他后台日志插入(哪怕你没在当前过滤条件下看到),导致分组被打断,所以标签会在新的分组开头重新显示。

如何让每条日志都显示标签?

如果你需要每条日志都完整显示标签,有两种简单的解决办法:

  1. 给标签添加唯一标识
    修改循环里的日志语句,把循环索引加入tag,让每条日志的tag都不一样:

    for (int i = 0; i < Response.size(); i++){ 
        Log.i("Resulted String #" + i, Response.get(i)); 
    }
    
  2. 关闭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

火山引擎 最新活动