日常开发时我们经常使用log来打印数据用来调试程序或者查看数据,有些时候我们需要打印的数据很长比如List数组里数据较多的时候不想写for循环打印,或者超长的json数据,这时候只会显示部分数据。
原因
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))

解决方案
1.使用断点debug模式在编译器里产看数据(简单省事)
2.编译/修改现在使用的Logutils方法:
代码如下:
public class LogUtil {
/**
* 截断输出日志
* @param msg
*/
public static void longlog(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);
}
}
}
把多次打印的数据整合到一起即可。

网友评论