测试开发之----给你的apk加上时间分片的log记录

那么这个示例会演示如何给你自己的apk加上log记录功能,之所以会有这一个,是因为当前所在项目在测试过程中是无法通过usb线连接电脑的(被硬件占了),远程调试也可以,但是会占用端口切来切去麻烦,并且速度非常慢 。于是考虑能不能够把log日志分时间段记录在sd卡,这样出问题可以直接获取日志,同时也可以为后续的持续集成log上传打下良好基础 。
PS:请无视项目名字,我懒得改了,因为一开始是匹配自己项目的 。
功能特点:

测试开发之----给你的apk加上时间分片的log记录

文章插图
直接上运行结果:
测试开发之----给你的apk加上时间分片的log记录

文章插图

测试开发之----给你的apk加上时间分片的log记录

文章插图
app界面
测试开发之----给你的apk加上时间分片的log记录

文章插图
原理解释:
1.点击开始记录,绑定一个log记录的服务
2.这个服务会初始化对象,该对象负责读取log信息并写入文件
3.在每次写的过程中,会获取时间,如果大于x秒,那么会重新创建一个新的文件流,继续写入,实现分时间记录
4.按日记录,查询文件夹内是否存在当天记录,不存在那么会创建今天的日志文件夹
代码:
.java:保存一些个可配置的常量
public class AirBotConst {public static final String LOG_DIR = Environment.getExternalStorageDirectory()+"/AirBotLog";public static final String TODAY_DIR = Environment.getExternalStorageDirectory()+"/AirBotLog/"+Utils.getFolderTime();public static final String NOW_FILE_NAME = Environment.getExternalStorageDirectory()+"/AirBotLog/"+Utils.getFolderTime()+"/"+Utils.getFileTime()+".log";public static final long SPLIT_TIME = 10 * 1000;//log分片时间}
:核心的类,负责读取记录和按时间分片记录log
public class RecordStep {String TAG = RecordStep.class.getName();boolean flag = true;boolean nameChange_flag = false;InputStream inputStream;BufferedReader bufferedReader;FileWriter fileWriter;boolean clearBefore = false;public void start(){new writeThread().start();}class writeThread extends Thread{@Overridepublic void run() {beginRecord();}}public void setClearBeforeEnable(){clearBefore = true;}private void beginRecord() {Log.i(TAG,"beging record");try {if(clearBefore){Runtime.getRuntime().exec("logcat -c");}inputStream = Runtime.getRuntime().exec("logcat -v time").getInputStream();bufferedReader = new BufferedReader(new InputStreamReader(inputStream));fileWriter = new FileWriter(AirBotConst.NOW_FILE_NAME);long s_time = System.currentTimeMillis();String str = null;while((str=bufferedReader.readLine())!=null){//Log.i(TAG,str);if(System.currentTimeMillis() - s_time > AirBotConst.SPLIT_TIME){fileWriter.flush();fileWriter.close();fileWriter = new FileWriter(AirBotConst.TODAY_DIR+"/"+Utils.getFileTime()+".log");//Log.i(TAG,"change record file!!!"+Utils.getFileTime());s_time = System.currentTimeMillis();}fileWriter.write(str);fileWriter.write("\n");}Log.i(TAG,"end?");}catch (Exception e){}finally {if(fileWriter!=null){try {fileWriter.flush();fileWriter.close();} catch (IOException e) {e.printStackTrace();}}}}public void stop(){flag = false;}}
【测试开发之----给你的apk加上时间分片的log记录】最后面是开源的代码地址: