为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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


查看完整回答
反对 回复 2019-08-09
?
呼唤远方

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());}

编辑显示最后一个字符串!


查看完整回答
反对 回复 2019-08-09
?
慕运维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);
   }}


查看完整回答
反对 回复 2019-08-09
  • 3 回答
  • 0 关注
  • 1842 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信