Android - 设置logcat消息的最大长度默认情况下,似乎logcat会截断它认为“太长”的任何日志消息。这在Eclipse内部以及在命令行上使用logcat运行时都会发生adb -d logcat,并且会截断一些重要的调试消息。有没有办法增加logcat支持的最大字符串长度,以使其停止截断调试信息?在官方文件意味着可能没有,但也许logcat的支持一些额外的选项不是有提及?
3 回答
智慧大石
TA贡献1946条经验 获得超3个赞
logcat中有一个固定大小的缓冲区用于二进制日志(/dev/log/events
),这个限制是1024字节。对于非二进制日志,还有一个限制:
#define LOGGER_ENTRY_MAX_LEN (4*1024)#define LOGGER_ENTRY_MAX_PAYLOAD (LOGGER_ENTRY_MAX_LEN - sizeof(struct logger_entry))
因此,二进制和非二进制日志的实际消息大小约为4076字节。内核记录器接口强加了此LOGGER_ENTRY_MAX_PAYLOAD
限制。
liblog源(由logcat使用)也说:
该消息可能已被内核日志驱动程序截断。
我建议你使用不使用logcat二进制文件的nxlog工具,但是由于内核的限制,我怀疑它会解决你的问题。不过,它可能值得一试。(免责声明:我是作者。)
呼唤远方
TA贡献1856条经验 获得超11个赞
好的,有趣的。我很失望地看到答案是“你无法真正扩展它”。我最初的想法是打破它,所以我可以查看整个事情,所以我在这里与大家分享我是如何做到的(不是它有什么特别的,也不是接近效率,但它可以在紧要关头完成工作):
if (sb.length() > 4000) { Log.v(TAG, "sb.length = " + sb.length()); int chunkCount = sb.length() / 4000; // integer division for (int i = 0; i <= chunkCount; i++) { int max = 4000 * (i + 1); if (max >= sb.length()) { Log.v(TAG, "chunk " + i + " of " + chunkCount + ":" + sb.substring(4000 * i)); } else { Log.v(TAG, "chunk " + i + " of " + chunkCount + ":" + sb.substring(4000 * i, max)); } }} else { Log.v(TAG, sb.toString());}
编辑显示最后一个字符串!
慕运维8079593
TA贡献1876条经验 获得超5个赞
递归地分解几个部分。
public static void largeLog(String tag, String content) { if (content.length() > 4000) { Log.d(tag, content.substring(0, 4000)); largeLog(tag, content.substring(4000)); } else { Log.d(tag, content); }}
- 3 回答
- 0 关注
- 1842 浏览
添加回答
举报
0/150
提交
取消