在开发中我们常常会打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长度的信息,那很容易想到将待打印的信息拆分成一个个信息段,然后分别打印即可。
我在实际测试时发现,日志的最大长度其实是略小于41024的,为了保险起见,我们设置每一段日志长度segmentSize = 31024。如果待打印的字符串信息长度小于等于segmentSize,则直接打印即可;如果大于segmentSize则将日志信息截断为一段一段分别打印。
代码如下:
import android.util.Log;
public class LogUtil {
/**
* 截断输