之前项目中返回json字符串超长,导致log输出一部分,后面部分没有,上网查了不少资料,结果给的方法都是:
public static void i(String tag, String msg) {
if (DEBUG_MODE) {
if (msg.length() > LENGTH) {
for (int i = 0; i < msg.length(); i += LENGTH) {
if (i + LENGTH < msg.length()) {
android.util.Log.i(tag, msg.substring(i, i + LENGTH));
} else {
android.util.Log.i(tag, msg.substring(i, msg.length()));
}
}
} else {
android.util.Log.i(tag, msg);
}
}
}
其中LENGTH是自己设置的长度值,一般为4000(下面有原因为啥是这个值).
还很有理有据的解释,底层Logger有长度限制是4*1024,都不知道验证一下就发出了,结果这个方法的确可以打印很多log了,但是,但是! log换行打印之后,
两行之间会丢失不少字符!
经过不懈努力,我终于找到了办法:
public static void i(String tag, String msg) { //信息太长,分段打印
//因为String的length是字符数量不是字节数量所以为了防止中文字符过多,
// 把4*1024的MAX字节打印长度改为2001字符数
int max_str_length = 2001 - tag.length();
//大于4000时
while (msg.length() > max_str_length) {
Log.i(tag, msg.substring(0, max_str_length));
msg = msg.substring(max_str_length);
}
//剩余部分
Log.i(tag, msg);
}
完美解决.
20200330更新:
使用 logger 吧,打印的日志还能自定义样式,可以直接定位到日志是哪行代码输出的,很方便:GitHub地址

本文介绍了一种有效解决Android应用程序中Log输出不完整的方法,通过调整字符串长度和改进输出方式,确保日志信息完整记录。

2387

被折叠的 条评论
为什么被折叠?



