在开发中我们常常会打Log来调试程序,但有时候打印的信息长度非常长,比如我们想打Log查看接口返回的json数据,而这个json数据非常大时,这时Logcat会出现打印不全的情况。

原因
Android系统对日志长度有限制的,最大长度为4K(注意是字符串的长度),超过这个范围的自动截断,所以就会出现打印不全的情况。

从Android内核源码来看,在logger.h头文件中有以下宏定义:

#define LOGGER_ENTRY_MAX_LEN        (4*1024)  #define LOGGER_ENTRY_MAX_PAYLOAD    \      (LOGGER_ENTRY_MAX_LEN - sizeof(struct logger_entry))

可以看到第一行定义了LOGGER_ENTRY_MAX_LEN为4*1024,即日志的最大长度为4k。

知道了问题的原因,下面来看看怎么解决。

解决办法
既然一次只能打印4K长度的信息,那很容易想到将待打印的信息拆分成一个个信息段,然后分别打印即可。

我在实际测试时发现,日志的最大长度其实是略小于41024的,为了保险起见,我们设置每一段日志长度segmentSize = 31024。如果待打印的字符串信息长度小于等于segmentSize,则直接打印即可;如果大于segmentSize则将日志信息截断为一段一段分别打印。

代码如下:

import android.util.Log;public class LogUtil {    /**     * 截断输出日志     * @param msg     */    public  void loge  (String tag, String msg) {        if (tag == null || tag.length() == 0                || msg == null || msg.length() == 0)            return;        int segmentSize = 3 * 1024;        long length = msg.length();        if (length <= segmentSize ) {// 长度小于等于限制直接打印            Log.e(tag, msg);        }else {            while (msg.length() > segmentSize ) {// 循环分段打印日志                String logContent = msg.substring(0, segmentSize );                msg = msg.replace(logContent, "");                Log.e(tag,"-------------------"+ logContent);            }            Log.e(tag,"-------------------"+ msg);// 打印剩余日志        }    }}

更多相关文章

  1. Android日志输出
  2. android 信息(mms)的故事 (一)
  3. Android界面设计学习日志(二)
  4. Android Log 打印日志工具Logcat
  5. 【Android】Android Crash之异常信息反馈机制
  6. Android 学习 之 Activity 堆栈信息
  7. Android中用广播从Service中向Activity发送信息
  8. 27、android log日志
  9. Android获取窗体信息的Util方法

随机推荐

  1. [Android 开发3] android kernel 编译&加
  2. Android(安卓)Service 简介
  3. Android 常用的提示框Dialog
  4. Android Studio App EditText获取输入的
  5. Android随笔之——闹钟制作铺垫之AlarmMa
  6. Android-Fresco系列2 加载资源
  7. Android(安卓)Kotlin 学习总结(一) 《KAE
  8. SeekBar涓?labelFor鏍囩no resource id
  9. Android(安卓)Cordova 插件开发之自定义
  10. EACCES (permission denied)解决办法 and