猿问

Android - 设置logcat消息的最大长度

Android - 设置logcat消息的最大长度

默认情况下,似乎logcat会截断它认为“太长”的任何日志消息。这在Eclipse内部以及在命令行上使用logcat运行时都会发生adb -d logcat,并且会截断一些重要的调试消息。

有没有办法增加logcat支持的最大字符串长度,以使其停止截断调试信息?在官方文件意味着可能没有,但也许logcat的支持一些额外的选项不是有提及?


婷婷同学_
浏览 1843回答 3
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工具,但是由于内核的限制,我怀疑它会解决你的问题。不过,它可能值得一试。(免责声明:我是作者。)

呼唤远方

好的,有趣的。我很失望地看到答案是“你无法真正扩展它”。我最初的想法是打破它,所以我可以查看整个事情,所以我在这里与大家分享我是如何做到的(不是它有什么特别的,也不是接近效率,但它可以在紧要关头完成工作):if&nbsp;(sb.length()&nbsp;>&nbsp;4000)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Log.v(TAG,&nbsp;"sb.length&nbsp;=&nbsp;"&nbsp;+&nbsp;sb.length()); &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;chunkCount&nbsp;=&nbsp;sb.length()&nbsp;/&nbsp;4000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;integer&nbsp;division &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<=&nbsp;chunkCount;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;max&nbsp;=&nbsp;4000&nbsp;*&nbsp;(i&nbsp;+&nbsp;1); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(max&nbsp;>=&nbsp;sb.length())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.v(TAG,&nbsp;"chunk&nbsp;"&nbsp;+&nbsp;i&nbsp;+&nbsp;"&nbsp;of&nbsp;"&nbsp;+&nbsp;chunkCount&nbsp;+&nbsp;":"&nbsp;+&nbsp;sb.substring(4000&nbsp;*&nbsp;i)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.v(TAG,&nbsp;"chunk&nbsp;"&nbsp;+&nbsp;i&nbsp;+&nbsp;"&nbsp;of&nbsp;"&nbsp;+&nbsp;chunkCount&nbsp;+&nbsp;":"&nbsp;+&nbsp;sb.substring(4000&nbsp;*&nbsp;i,&nbsp;max)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Log.v(TAG,&nbsp;sb.toString());}编辑显示最后一个字符串!

慕运维8079593

递归地分解几个部分。public&nbsp;static&nbsp;void&nbsp;largeLog(String&nbsp;tag,&nbsp;String&nbsp;content)&nbsp;{ &nbsp;&nbsp;&nbsp;if&nbsp;(content.length()&nbsp;>&nbsp;4000)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d(tag,&nbsp;content.substring(0,&nbsp;4000)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;largeLog(tag,&nbsp;content.substring(4000)); &nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d(tag,&nbsp;content); &nbsp;&nbsp;&nbsp;}}
随时随地看视频慕课网APP

相关分类

Android
我要回答