Android 封装Log工具并上传Log文件到服务器(带类名、方法名

本文介绍了如何在Android中封装一个自定义的Log工具,它能记录类名、方法名和行号。同时,当日志文件大小达到一定值或出现错误、警告、崩溃级别日志时,会将日志文件上传到服务器。通过Okhttp使用multipart提交表单实现文件上传。此外,还展示了如何实现全局的CrashHandlerManager,用于捕获和处理未被捕获的异常,收集设备信息并记录到日志。
摘要由CSDN通过智能技术生成

} finally {

try {

if (bw != null) {

bw.close();//关闭缓冲流

}

} catch (IOException e) {

e.printStackTrace();

}

}

if (getLogsFileSize(fileName) >= 1f) {

sendToServer(fileName);

} else if (level == CRASH_LEVEL || level == ERROR_LEVEL || level == WARNING_LEVEL) {

sendToServer(fileName);

}

}

上面有一个巨顶的方法:

Thread.currentThread().getStackTrace()[5]

这行函数能够得离当前执行代码的指令。(注:不一定是5)

因为在执行命令时,指令栈保存当前线程最近执行的代码。

它的原理是这样的:

1、MainActivity : LogTool.d(xxx,xxx)

跳转-》

2、LogTool: d(xxx,xx){wirteToFile(xxx,xxx)}

跳转-》

3、LogTool:writeToFile(xxx){}

假如上面是一个指令栈,那么我就去获取这个栈的栈底元素 [1] MainActivity… 这一行,得到的是个StackTraceElement 对象。

得到该对象之后,我们可以将该指令反射,通过getClassName()获取类名,通过getMethodName()获取方法名、通过getLineNumber()获取当前行数,就省的我们一步一步去找具体哪行了。

所以上面代码中的第5行只是我这边的情况,别的代码就要自己去推理具体在哪一行咯。

接下来就是上传到服务器,这里使用Okhttp,上传的格式是包括文件+一些附带String信息,
所以使用mutipart来提交表单,并且开启一个线程来提交。

/**

  • 上传Log文件至服务器

  • @return

*/

public static void sendToServer(final

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值