Android 终于知道Log显示不全的原因了
来源:互联网 发布:阿里云cdn怎么解析 编辑:程序博客网 时间:2024/04/20 13:20
一个优秀的软件系统一定会实时保存系统运行过程中产生的异常或非异常性数据,用于记录系统运行过程产生的各种行为,作为日后发现问题、跟踪问题并解决问题的一个很重要的依据。一般以输出文件的形式保存,同时也可以选择性的在控台打印。日志处理,可谓是任何软件开发过程中必不可少的一个环节。
在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))
可以看出,系统显示单条Log信息的长度是固定的,为4*1024个字符长度!Logcat使用的liblog资源包也提到,使用Log打印的message有可能被log内核驱动缩短:
The message may have been truncated by the kernel log driver.
了解了其中的长度限制,就好办了。我们可以对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);}
参考地址:
- Android - Set max length of logcat messages
- Android 日志系统logcat内核代码分析
0 0
- 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 模拟器显示不全的解决方案
- java输出货比符号测试方法:
- Hadoop2.4.1集群搭建(YARN)
- hdu 5741(二分)
- TextView 设置显示省略号
- 去除程序 Asrl基址固定
- Android 终于知道Log显示不全的原因了
- Android中的Shape使用总结
- Insertion Sort Integer Array & Insertion Sort Linked List
- css 2D 转换
- C#基础知识--引用类型和值类型/装箱和拆箱操作
- 简单的利用UrlConnection,后台模拟http请求
- uva12558 (迭代加深搜索)
- mysql千万级大数据SQL查询优化
- gflod求基因表达值 FPKM