Android studio中log的内容不完整(log被截断)

今天在调试Android程序的时候,想要log一段json数据,数据挺大的,折腾了半天,原来以为是JSON的长度会不会是有上限的,经过搜索发现并没有,参考StackOverflow的两个问题android - What is limit of json array and how to overcome it - Stack OverflowIs there a limit on how much JSON can hold? - Stack Overflow。此外,还试图研究Java中String的长度上限,参考这篇文章java中String类型的最大长度_cyw1900的专栏-CSDN博客_string类型的最大长度,发现String的上限远比我的数据要大的多,总结就是String类型的长度为320339960,其最大容量不超过1个G

后来发现是Android studio的log的字符串长度是有上限的,logcat在实现上对于message的内存分配大概是4k左右,实际上根据我的个人的log来看,截取的部分大约是4056个字符串,超过的部分都会被截断。经过搜索,发现网上一个博主自己定义一个debug工具类切分超过4k的message,来解决这个问题。

实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class DebugUtils {
// 使用Log来显示调试信息,因为log在实现上每个message有4k字符长度限制
// 所以这里使用自己分节的方式来输出足够长度的message
public static void show(String str) {
str = str.trim();
int index = 0;
int maxLength = 4000;
String sub;
while (index < str.length()) {
// java的字符不允许指定超过总的长度end
if (str.length() <= index + maxLength) {
sub = str.substring(index);
} else {
sub = str.substring(index, maxLength);
}

index += maxLength;
Log.i("qidizi_debug", sub.trim());
}
}
}

本文参考文章:android的logcat的message有字符长度的限制,超过将直接截断,仅作为个人笔记记录。