当前位置: 首页 > article >正文

Android中Logcat长日志打印不全问题正解

https://juejin.cn/post/6887066905967951879 

/**
     * 打印日志到控制台(解决Android控制台丢失长日志记录)
     *
     * @param priority 
     * @param tag
     * @param content
     */
    public void print(int priority, String tag, String content) {
        // 1. 测试控制台最多打印4062个字节,不同情况稍有出入(注意:这里是字节,不是字符!!)
        // 2. 字符串默认字符集编码是utf-8,它是变长编码一个字符用1~4个字节表示
        // 3. 这里字符长度小于1000,即字节长度小于4000,则直接打印,避免执行后续流程,提高性能哈
        if (content.length() < 1000) {
            Log.println(priority, tag, content);
            return;
        }

        // 一次打印的最大字节数
        int maxByteNum = 4000;

        // 字符串转字节数组
        byte[] bytes = content.getBytes();

        // 超出范围直接打印
        if (maxByteNum >= bytes.length) {
            Log.println(priority, tag, content);
            return;
        }

        // 分段打印计数
        int count = 1;

        // 在数组范围内,则循环分段
        while (maxByteNum < bytes.length) {
            // 按字节长度截取字符串
            String subStr = cutStr(bytes, maxByteNum);

            // 打印日志
            String desc = String.format("分段打印(%s):%s", count++, subStr);
            Log.println(priority, tag, desc);

            // 截取出尚未打印字节数组
            bytes = Arrays.copyOfRange(bytes, subStr.getBytes().length, bytes.length);

            // 可根据需求添加一个次数限制,避免有超长日志一直打印
            /*if (count == 10) {
                break;
            }*/
        }

        // 打印剩余部分
        Log.println(priority, tag, String.format("分段打印(%s):%s", count, new String(bytes)));
    }


    /**
     * 按字节长度截取字节数组为字符串
     *
     * @param bytes
     * @param subLength
     * @return
     */
    public String cutStr(byte[] bytes, int subLength) {
        // 边界判断
        if (bytes == null || subLength < 1) {
            return null;
        }

        // 超出范围直接返回
        if (subLength >= bytes.length) {
            return new String(bytes);
        }

        // 复制出定长字节数组,转为字符串
        String subStr = new String(Arrays.copyOf(bytes, subLength));

        // 避免末尾字符是被拆分的,这里减1使字符串保持完整
        return subStr.substring(0, subStr.length() - 1);
    }


http://www.kler.cn/a/372502.html

相关文章:

  • MimicBrush:智能图像编辑新宠,能否革新你的创意设计?
  • mysql 查询优化之字段建立全文索引
  • 智能化军事【五】精确制导武器智能化实现
  • Flutter动画学习二
  • 知乎 PB 级别 TiDB 数据库集群管控实践
  • ARM异常处理 M33
  • HTML入门教程6:HTML段落
  • LeetCode 2058.找出临界点之间的最小和最大距离
  • ChatGPT-o1辅助论文写作的优势及12个方向提示词分享
  • camera和lidar外参标定
  • 线性代数(1)——线性方程组的几何意义
  • Mongodb-Plus 轻松上手
  • LSTM:解决梯度消失与长期依赖问题
  • 凌雄科技打造DaaS模式,IT设备产业链由内而外嬗变升级
  • Spring Cloud --- 引入Seata分布式事务
  • 【Java并发编程】线程池详解
  • Codeforces Round 966 (Div. 3)
  • react 框架应用+总结+参考
  • 鸿蒙网络编程系列40-TLS数字证书查看及验签示例
  • 鸿蒙生态崛起,开发者如何抓住机遇应对挑战?
  • 常见的jar包报错以及解决办法
  • 大数据分析与应用
  • QT SSDP 局域网检测支持扫描通信
  • 锂电池无线充电
  • 精准帮扶:SpringBoot扶贫管理系统
  • 如何编写一个高效的Java工具类