測試開發之----給你的apk加上時間分片的log記錄

那麼這個示例會演示如何給你自己的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

發佈了127 篇原創文章 · 獲贊 152 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章