版权声明:本文为xing_star原创文章,转载请注明出处!

本文同步自http://javaexception.com/archives/147

个人app如何收集用户日志,相信不少人对这个话题感兴趣,本文将结合自己的实际经历,分享下自己的做法。

用邮件收集用户上报日志

在上篇文章http://javaexception.com/archives/144 中,我提到了,客户端日志文件上传这一功能,对于个人开发者而言,个人app如何收集用户日志,值得思考下。先从bugly等第三方的bug收集讲起,他们这些只能收集部分日志信息,不完整,没有完整的上下文,也不利于分析问题,另外是crash或者是exception下才会上报日志,有些业务并不会发生crash或者是exception,这不满足自己的特定需求。如果是用日志文件的方式记录日志呢,这个好,可以有完整的日志,要考虑的就是日志如何上传的问题了。对于日志上传,如果有自己的服务器,那么也好处理,但是对个人开发者而言,还得配置下才能将日志上传到服务器,查阅也麻烦,有的并没有服务器,有没有低成本的实践方式呢,有的,可以考虑用邮件上传日志的方式。

这是在最近的一个app上实践的方案,不一定完美,但是目前适用于自己的app,如果用户量过于庞大,这种方式可能也不行,适合前期阶段。采用的是邮件上传日志文件的方式(日志文件是用xlog收集的日志),邮箱是在163上注册的新邮箱,通过授权码的方式,在客户端发送邮件到指定邮箱,不用担心账号密码泄漏。所有的日志都集中在邮箱中,查阅也相当方便。

先推荐一个开源项目,https://github.com/LillteZheng/ZMail,这个项目封装了邮件api,降低了开发者的使用成本。

app上的界面效果

关键代码

点击日志上传的核心代码如下:

private static boolean isUploadLog = false;

    private void uploadLog() {
if (isUploadLog) {
Toast.makeText(AboutActivity.this, "日志已上传成功", Toast.LENGTH_SHORT).show();
return;
}
File file = new File(getFilesDir().getAbsolutePath() + "/log");
if (!file.exists()) {
return;
}
StringBuffer sbf = new StringBuffer("用户上传了客户端日志,请查收!\n系统参数如下:\n");
sbf.append("手机厂商:").append(SystemUtils.getDeviceBrand()).append("\n")
.append("手机型号").append(SystemUtils.getSystemModel()).append("\n")
.append("手机当前系统语言:").append(SystemUtils.getSystemLanguage()).append("\n")
.append("Android系统版本号:").append(SystemUtils.getSystemVersion());
ZMailManager
.fromAddr("xxxxxx@163.com")
.nickName("微信好友检测助手")
.password("xxxxxx")
// .host("smtp.163.com")
//.isSSLvertify(false)
//.port(25)
.subject("[微信好友检测助手日志上报]")
.content(sbf.toString())
// .file(imageUrl)
.file(new String[]{getFilesDir().getAbsolutePath() + "/log"})
.toAddrs(new String[]{"xxxxxx@qq.com"})
.listener(new IEmailSendListener() {
@Override
public void sendStart() {
showProgressDialog();
} @Override
public void sendFailed(String errorMsg) {
hideProgressDialog();
} @Override
public void sendSuccess() {
hideProgressDialog();
isUploadLog = true;
Toast.makeText(AboutActivity.this, "日志已上传成功", Toast.LENGTH_SHORT).show();
}
})
.send();
}

代码混淆配置:

-keep class javax.mail.** {*;}
-keep class javax.activation.** {*;}
-keep class com.android.zemaillib.** {*;}
-keep class com.sun.mail.** {*;}
-keep class com.sun.activation.registries.** {*;}
-dontwarn java.awt.**
-dontwarn javax.activation.**

参考资料:

Zmail地址 https://github.com/LillteZheng/ZMail 降低了邮件api的使用门槛

xlog地址 https://github.com/elvishew/xLog 将客户端日志保存到日志文件

其他:

zmail除了可以做日志收集,也可以用来实现用户意见反馈。

个人app如何收集用户日志的更多相关文章

  1. iOS完整App资源收集

    前言 iOS开发学习者都希望得到实战训练,但是很多资料都是只有一小部分代码,并不能形成完成的App,笔者在此处收集了很多开源的完整的App,都有源代码哦! 本篇文章持续更新中,请持续关注.本篇所收集的 ...

  2. iOS通过URL Scheme启动app(收集了常用的app的URL Scheme)

    URL Scheme不仅可以打开其他的app,当然你也能为自己的app设置URL Scheme 1.如何设置给app设置URL Scheme 添加URL types字段数组 设置URL identif ...

  3. Android-控制整个APP的异常收集与处理

    控制整个App的异常收集与处理,使用前记得要在Application中初始化initCrasHandler CrasHandler APP异常收集类: package common.library.e ...

  4. 《App研发录》知识点汇总

    原文链接:http://www.jianshu.com/p/fc8c4638937e <App研发录>这部书是包建强写的,说来也巧,在读这边书之前在看池建强的<Mac 人生元编程&g ...

  5. 开发APP不搞清楚这20个问题,必然沦为一场灾难

    移动经济的高速增长极大刺激了企业和个人的APP开发热情,从卖野山鸡的到卖无人机的,从老大妈到小正太都跃跃欲试,更不要说那些传统企业的信息主管们了. 面对今天如过江之鲫的APP市场,很少有人意识到,移动 ...

  6. APP开发的基本流程

    一个独立App开发人的自白:做APP就是一场赌局,你要会押注 下面我们就直接来看下APP从业者必知的整个APP开发标准流程. 一般的APP开发及上线流程 步骤如下: 首先,制作一款APP,必须要有相关 ...

  7. iOS开发之资料收集

    github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自github:https://github ...

  8. 带你从零学ReactNative开发跨平台App开发(七)

    ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...

  9. iOS App 上架(Analysis 工具使用)

    随着iOS开发的流行,针对iOS开发涉及的方方面面,早有一些公司提供了专门的解决方案或工具.这些解决方案或工具包括:用户行为统计工具(友盟,Flurry,Google Analytics等), App ...

随机推荐

  1. 用C#写小工具:将圆柱面贴图映射到半球贴图

    最近在写GBA的程序.GBA运行的是C的裸机代码,而中途使用的很多小工具则用C#写的,例如:图片转换到.h头文件,制作三角函数表,还有像这次介绍的将圆柱面贴图映射到半球贴图的小工具.这样的小功能,用C ...

  2. MySQL必知必会(Select)

    SELECT prod_name FROM products; SELECT prod_id, prod_name, prod_price FROM products; SELECT * FROM p ...

  3. luogu P2401 不等数列 |动态规划

    题目描述 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入">"和"<".问在所有排列中,有多少个排列恰好有k个"< ...

  4. JavaScript1 基础

    JavaScript的组成 ·ECMAScript  描述了语言的语法和基本对象/ ·DOM 文档对象模型,描述处理网页内容/ BOM 浏览器对象模型 描述与浏览器进行交互的方法和接口 引入方式/ h ...

  5. ST MCU的UID

    ST MCU芯片中的绝大部分都内置一串96位唯一标识码[unique ID].时不时有人问起这个东西,尤其最近感,觉询问它的人甚是热闹.这里跟大家一起简单分享下. 上面说了ST MCU芯片中的绝大部分 ...

  6. vs2017/vs2019 去掉 单击aspx文件预览页面

    初次安装vs2017或者vs2019,新建的项目中,每次单击项目文件时,文件自动打开了 然后 打开 工具->选项->环境->选项卡和窗口->预览选项卡->勾掉" ...

  7. 从RTL视图到Verilog语言-转可乐豆原创

    从RTL视图到Verilog语言 曾经听过某位大牛都说:“当你的学习FPGA到一个境界的时候,你看到的硬件描述语言,将不再是单纯的语言,而是由一个个逻辑门组成的电路图,一旦达到这个境界,方能把代码写到 ...

  8. 【JS】310- 使用 focusout 事件,解决 iOS 键盘收起不归位问题

    点击上方"前端自习课"关注,学习起来~ ,0);            }        }, 这时,我们问题得到解决了,当从输入框输入内容,然后点击键盘的完成收起键盘,效果符合我 ...

  9. Mechanical Design Optimization with Abaqus and Isight

    一.项目背景 本项目为"ME327机械优化设计方法"课程项目. 如何合理利用更轻更强的材料,是机器人结构设计值得深究的问题.在驱动的功率一定的情况下,更轻的机械结构意味着电机承受更 ...

  10. 解密国内BAT等大厂前端技术体系-携程篇(长文建议收藏)

    1 引言 为了了解当前前端的发展趋势,让我们从国内各大互联网大厂开始,了解他们的最新动态和未来规划.这是解密大厂前端技术体系的第四篇,前三篇已经讲述了阿里.腾讯.百度在前端技术这几年的技术发展. 这一 ...