个人app如何收集用户日志
版权声明:本文为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如何收集用户日志的更多相关文章
- iOS完整App资源收集
前言 iOS开发学习者都希望得到实战训练,但是很多资料都是只有一小部分代码,并不能形成完成的App,笔者在此处收集了很多开源的完整的App,都有源代码哦! 本篇文章持续更新中,请持续关注.本篇所收集的 ...
- iOS通过URL Scheme启动app(收集了常用的app的URL Scheme)
URL Scheme不仅可以打开其他的app,当然你也能为自己的app设置URL Scheme 1.如何设置给app设置URL Scheme 添加URL types字段数组 设置URL identif ...
- Android-控制整个APP的异常收集与处理
控制整个App的异常收集与处理,使用前记得要在Application中初始化initCrasHandler CrasHandler APP异常收集类: package common.library.e ...
- 《App研发录》知识点汇总
原文链接:http://www.jianshu.com/p/fc8c4638937e <App研发录>这部书是包建强写的,说来也巧,在读这边书之前在看池建强的<Mac 人生元编程&g ...
- 开发APP不搞清楚这20个问题,必然沦为一场灾难
移动经济的高速增长极大刺激了企业和个人的APP开发热情,从卖野山鸡的到卖无人机的,从老大妈到小正太都跃跃欲试,更不要说那些传统企业的信息主管们了. 面对今天如过江之鲫的APP市场,很少有人意识到,移动 ...
- APP开发的基本流程
一个独立App开发人的自白:做APP就是一场赌局,你要会押注 下面我们就直接来看下APP从业者必知的整个APP开发标准流程. 一般的APP开发及上线流程 步骤如下: 首先,制作一款APP,必须要有相关 ...
- iOS开发之资料收集
github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自github:https://github ...
- 带你从零学ReactNative开发跨平台App开发(七)
ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...
- iOS App 上架(Analysis 工具使用)
随着iOS开发的流行,针对iOS开发涉及的方方面面,早有一些公司提供了专门的解决方案或工具.这些解决方案或工具包括:用户行为统计工具(友盟,Flurry,Google Analytics等), App ...
随机推荐
- html格式化输出JSON( 测试接口)
将 json 数据以美观的缩进格式显示出来,借助最简单的 JSON.stringify 函数就可以了,因为此函数还有不常用的后面2个参数. 见MDN https://developer.mozilla ...
- HashMap的常见问题
关于HashMap的一些常见的问题,自己总结一下: 首选HashMap在jdk1.7和jdk1.8里面的实现是不同的,在jdk1.7中HashMap的底层实现是通过数组+链表的形式实现的,在jdk1. ...
- 【JS】388- 深入了解强大的 ES6 「 ... 」 运算符
本文原载于 SegmentFault 社区 专栏:大前端 作者:皮小蛋 背景 ... 运算符,是 ES6 里一个新引入的运算法,也叫 展开/收集 运算符,我们每天都要和它打交道. 这篇文章,我就带你 ...
- python爬虫--爬虫与反爬
爬虫与反爬 爬虫:自动获取网站数据的程序,关键是批量的获取. 反爬虫:使用技术手段防止爬虫程序的方法 误伤:反爬技术将普通用户识别为爬虫,从而限制其访问,如果误伤过高,反爬效果再好也不能使用(例如封i ...
- Python3 基本类型在64位上的占用内存情况
基本类型占用的内存 类型 # -*- coding: utf-8 -*- # @Time : 2019-12-19 11:16 # @Author : binger import sys a = No ...
- 使用if判断字符串的长度是否等于10,根据结果进行不同的输出
string1=' print(len(string1)) # 使用len()计算字符串长度 if not len(string1) ==10: print('字符串的长度不为10') else: p ...
- 用正则表达式【regexp】进行高级搜索数据
正则表达式介绍 正则表达式是用来匹配文本的特殊字符集合,如果你想从一个文本中提取电话号码而已使用正则表达式,如果你需要查找名字中包含数字的所有文件可以使用正则,如果你你要在文本块中找到所有重复的单词, ...
- visualStudio 的一些常用使用操作总结
今年苟了差不多一整年,期间断断续续把c++ prime plus 看完了 ,发现并没有什么鸟用 ,但是对代码怎么形成二进制的过程 动态内存管理 这些模模糊糊的确实理解更深刻些了 特别是c++过度到c# ...
- Gradle Java 插件
Java 插件是构建 JVM 项目的基础,它为项目增加了很多能力,例如编译,测试,打包,发布等等. 很多插件都是基于 Java 插件实现的,例如 Android 插件. 用法 使用 id 应用插件 p ...
- Scrcpy用电脑控制Android手机(支持Windows/macOS/Linux)
一.scrcpy简介 注意:拼写是scrcpy,非Python爬虫框架Scrapy. scrcpy可以通过adb调试的方式来将手机屏幕投到电脑上,并可以通过电脑控制您的Android设备.它可以通过U ...