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

来源:互联网 发布:多迪网络是培训机构嘛 编辑:程序博客网 时间:2024/05/17 05:17

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

功能特点:

这里写图片描述

直接上运行结果:
这里写图片描述
这里写图片描述

app界面
这里写图片描述

原理解释:

1.点击开始记录,绑定一个log记录的服务
2.这个服务会初始化RecordStep对象,该对象负责读取log信息并写入文件
3.在每次写的过程中,会获取时间,如果大于x秒,那么会重新创建一个新的文件流,继续写入,实现分时间记录
4.按日记录,查询文件夹内是否存在当天记录,不存在那么会创建今天的日志文件夹

代码:

AirBotConst.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分片时间}

RecordStep:核心的类,负责读取记录和按时间分片记录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{        @Override        public 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;    }}

最后面是开源的代码地址:
https://github.com/CloudHuan/LogRecord

1 0
原创粉丝点击