Android 终于知道Log显示不全的原因了
来源:互联网 发布:mac vi编辑器下载 编辑:程序博客网 时间:2024/04/24 07:02
一个优秀的软件系统一定会实时保存系统运行过程中产生的异常或非异常性数据,用于记录系统运行过程产生的各种行为,作为日后发现问题、跟踪问题并解决问题的一个很重要的依据。一般以输出文件的形式保存,同时也可以选择性的在控台打印。日志处理,可谓是任何软件开发过程中必不可少的一个环节。
在Android应用开发阶段,我们常常会使用系统提供的日志打印功能选择性地在Logcat控制台上打印一些数据信息,便于更加直观地调试跟踪应用运行的一个状态,常见如客户端与服务器通讯过程中涉及到的URL链接、request请求参数和response响应结果等。
但如果打印的message过长,比如接口响应结果过大,将会导致Logcat控台数据显示不全。自打使用Log以来经常遇到这个问题,之前也是没太在意,毕竟message太长的情况也是少见,偶尔遇到这种情况就通过Debug工具跟踪调试,复制对应response信息到bejson等其他辅助工具上格式化浏览,多少还是有点不方便。
后来经过查询才得知,Android系统的单条日志打印长度是有限的,在底层Logger驱动程序的一个类Logger.h
头文件中有如下两行代码:
#define LOGGER_ENTRY_MAX_LEN (4*1024) #define LOGGER_ENTRY_MAX_PAYLOAD \\ (LOGGER_ENTRY_MAX_LEN - sizeof(struct logger_entry))
- 1
- 2
- 3
可以看出,系统显示单条Log信息的长度是固定的,为4*1024个字符长度!Logcat使用的liblog资源包也提到,使用Log打印的message有可能被log内核驱动缩短:
The message may have been truncated by the kernel log driver.
- 1
了解了其中的长度限制,就好办了。我们可以对Message做个长度判断,采取分段打印的办法输出日志信息,比如这样做:
if(xml.length() > 4000) { for(int i=0;i<xml.length();i+=4000){ if(i+4000<xml.length()) Log.i("rescounter"+i,xml.substring(i, i+4000)); else Log.i("rescounter"+i,xml.substring(i, xml.length())); }} else Log.i("resinfo",xml);}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
参考地址:
- Android - Set max length of logcat messages
- Android 日志系统logcat内核代码分析
http://blog.csdn.net/growing_tree/article/details/52063896
- Android 终于知道Log显示不全的原因了
- Android 终于知道Log显示不全的原因了
- android log打印显示不全的原因
- 我终于知道错误的原因了
- android SeekBar thumb显示不全的原因
- android 基础 log打印显示不全
- Android studio打印log显示不全
- 关于android studio log日志打印信息不全的原因以及解决方法
- 关于Android studio Logcat显示不全,不显示自己需要打印的LOG数据
- ext tabpanel显示不全的原因
- 某个控件显示不全的原因
- 终于知道怎么显示摘要了
- 360手机log显示不全
- 终于知道“文章摘要”的作用了
- 终于找到包裹打不开的原因了
- ScrollView嵌套ListView导致item显示不全的原因
- 终于知道关键了
- Android 模拟器显示不全的解决方案
- Eclipse怎么在线安装JD-Eclipse反编译插件?
- JDK的动态代理深入解析(Proxy,InvocationHandler)
- Java数据结构和算法(二)——数组
- 往上寻找各阶级父类元素
- 自绘圆角矩形按钮
- Android 终于知道Log显示不全的原因了
- 【LeetCode】C# 104、Maximum Depth of Binary Tree
- 离散余弦变换
- 虚函数与多态性、纯虚函数的区别联…
- unity人物攻击类
- 函数的覆盖、重载、隐藏
- 函数的引用
- 头文件防重复包含
- 每日一句英语