Android开发之 log打印 连续打印内容过多导致部分信息丢失或打印中断
最近在使用retrofit进行接口请求数据log打印输出时,出现了内容过多导致部分信息没打印或者中断问题。网上搜了半天没有对应的解决方案,今天我分享一下自己的解决方法。
问题简述
先贴一下原来的打印代码
String[] split = sb.toString().split("\n");
for(String str : split){
if(info) {
Log.i(TAG, str);
}else{
Log.e(TAG, str);
}
}
正常打印效果
代码是先把添加好要打印的日志信息Stringbuilder对象 通过拆分换行符进行逐行打印。内容少的情况下,输出打印的信息没有问题,但是内容一旦多了起来就会导致内容错乱甚至中断
这是内容过多情况下的输出,只截取了结尾中断的部分
从图中可以看到部分信息没有打印,即中断了。
解决办法
1 将所要输出的信息,追加在StringBuilder中直接一条语句全部输出打印
Log.i(TAG,StringBuilder.toString());
接下来看一下效果(为了直观的展示,我只截取了内容少的信息输出,其实内容多的输出没有中断或是缺失)
从图中可以看到,信息是打印出来了(此图为展示范例,内容过多的情况下输出是完整的)。但是仍然有问题。那就是在第一行会展示时间,包名,tag信息后,之后的信息是不展示的,如果输出内容超过一定的行数(20行上下),会再一次输出一次时间、包名、tag信息。这样展示会给人错乱的感觉,可读性也不佳
2 用ArrayList集合收集要输出的日志信息,并在打印的结尾加上序号
for(int i = 0 ; i < logArrays.size() ; i ++ ){
String str = logArrays.get(i);
if (info) {
Log.i(TAG , str.replace("\n","")+" "+logArrays.size()+" "+i);
//为保证内容过多导致打印中断会部分信息丢失,后面追加了序号
} else {
Log.e(TAG , str.replace("\n","")+" "+logArrays.size()+" "+i);
}
}
接下来看一下效果(内容过多不好截取全部,只展示末尾部分)
问题完美解决,至于原因,为什么。不要问,问我也不知道。
关于接口请求log信息输出增加可读性,可查看我往期文章
《Android 开发之Okhttp网络请求日志打印》
《Android 开发之retrofit网络请求日志打印 可读性更强的日志打印 HttpLoggingInterceptor》
也可以加QQ群交流技术