android log长字符串显示不全,Android中Logcat日志打印不全解决办法

在开发中我们常常会打Log来调试程序,但有时候打印的信息长度非常长,比如我们想打Log查看接口返回的json数据,而这个json数据非常大时,这时Logcat会出现打印不全的情况。

原因

Android系统对日志长度有限制的,最大长度为4K(注意是字符串的长度),超过这个范围的自动截断,所以就会出现打印不全的情况。

从Android内核源码来看,在logger.h头文件中有以下宏定义:

#define LOGGER_ENTRY_MAX_LEN (4*1024)

#define LOGGER_ENTRY_MAX_PAYLOAD \

(LOGGER_ENTRY_MAX_LEN - sizeof(struct logger_entry))

可以看到第一行定义了LOGGER_ENTRY_MAX_LEN为4*1024,即日志的最大长度为4k。

知道了问题的原因,下面来看看怎么解决。

解决办法

既然一次只能打印4K长度的信息,那很容易想到将待打印的信息拆分成一个个信息段,然后分别打印即可。

我在实际测试时发现,日志的最大长度其实是略小于4*1024的,为了保险起见,我们设置每一段日志长度segmentSize = 3*1024。如果待打印的字符串信息长度小于等于segmentSize,则直接打印即可;如果大于segmentSize则将日志信息截断为一段一段分别打印。

代码如下:

public class LogUtil {

/**

* 截断输出日志

* @param msg

*/

public static void e(String tag, String msg) {

if (tag == null || tag.length() == 0

|| msg == null || msg.length() == 0)

return;

int segmentSize = 3 * 1024;

long length = msg.length();

if (length <= segmentSize ) {// 长度小于等于限制直接打印

Log.e(tag, msg);

}else {

while (msg.length() > segmentSize ) {// 循环分段打印日志

String logContent = msg.substring(0, segmentSize );

msg = msg.replace(logContent, "");

Log.e(tag, logContent);

}

Log.e(tag, msg);// 打印剩余日志

}

}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值