android 日志上传策略,Android进阶:一、日志打印和保存策略

本文介绍了Android项目中自定义日志打印和保存策略,包括增加详细信息如线程信息,使用HandlerThread和消息队列进行日志保存,以避免频繁接口调用,并提供了一个简单的日志保存策略实现。
摘要由CSDN通过智能技术生成

前言:

项目开始没有做好日志统计工作,每次有问题后端都得找前端对接,严重影响工作效率。最近特地在项目中加上日志保存策略,在此分享,供需要的人学习。

更详细的日志信息

既然决定自定义一个log,那我们就可以让它显示更多的信息,如线程信息:threadId,threadName等:private String getFunctionName(){

StackTraceElement[] sts = Thread.currentThread().getStackTrace();

if (sts == null) {

return null;

}

for (StackTraceElement st : sts) {

if (st.isNativeMethod()) {

continue;

}

if (st.getClassName().equals(Thread.class.getName())) {

continue;

}

if (st.getClassName().equals(this.getClass().getName())) {

continue;

}

Thread t = Thread.currentThread();

return "[T(id:" + t.getId() +

", name:" + t.getName() +

", priority:" + t.getPriority() +

", groupName:" + t.getThreadGroup().getName() +

"): " + st.getFileName() + ":"

+ st.getLineNumber() + " " + st.getMethodName() + " ]";

}

return "";

}

复制代码

StackTrace(堆栈轨迹)存放的就是方法调用栈的信息,我们从中获取方法执行的线程相关的信息,以及执行的方法名称等。这些信息能帮助我们更好的查找问题之所在。private void logPrint(int logLevel, Object msg){

if (isDebug) {

String name = getFunctionName();

customTag = TextUtils.isEmpty(customTag) ? defaultTag : customTag;

Log.println(logLevel, customTag, name + " - " + msg);

}

}

复制代码

使用Log.println方法打印相关信息即可。

日志保存策略

后端的人在测试的时候会遇到BUG,有时候不知道到底是前端出了问题还是后端的问题,为了更好更快速的定位,后端应该知道前端的日志保存在哪里。这就需要我们制定一个日志保存策略。(即使要上传日志,也应该先保存成文件再上传文件,不然每一条日志调用一次接口,接口的压力会很大,很不合理)

由于保存日志的过程是个耗时过程,我们需要开启线程去保存。但是日志产生的频率可能很高,又不能采用一般的线程去处理,太多的线程也会损耗性能。所以我们应该考虑队列的形式保存日志,然后一条一条的去保存。public void initSaveStrategy(Context context){

if (saveLogStrategy != null || !isDebug) {

return;

}

final int MAX_BYTES = 1024 * 1024;

String diskPath = Environment.getExternalStorageDirectory().getAbsolutePath

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值