那么这个示例会演示如何给你自己的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 = ExternalStorageDirectory()+"/AirBotLog";public static final String TODAY_DIR = ExternalStorageDirectory()+"/AirBotLog/"FolderTime();public static final String NOW_FILE_NAME = ExternalStorageDirectory()+"/AirBotLog/"FolderTime()+"/"FileTime()+".log";public static final long SPLIT_TIME = 10 * 1000; //log分片时间
}
RecordStep:核心的类,负责读取记录和按时间分片记录log
public class RecordStep {String TAG = Name();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().exec("logcat -c");}inputStream = Runtime().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((stradLine())!=null){//Log.i(TAG,str);if(System.currentTimeMillis() - s_time > AirBotConst.SPLIT_TIME){fileWriter.flush();fileWriter.close();fileWriter = new FileWriter(AirBotConst.TODAY_DIR+"/"FileTime()+".log");//Log.i(TAG,"change record file!!!"FileTime());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;}
}
最后面是开源的代码地址:
本文发布于:2024-02-04 15:40:05,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170710761656773.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |