欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

个人app如何收集用户日志

程序员文章站 2022-04-15 15:34:19
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/147 个人app如何收集用户日志,相信不少人对这个话题感兴趣,本文将结合自己的实际经历,分享下自己的做法。 用邮件收集用户上报日志 在上篇文章http://j ......

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

本文同步自

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

用邮件收集用户上报日志

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

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

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

app上的界面效果

个人app如何收集用户日志

 

个人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除了可以做日志收集,也可以用来实现用户意见反馈。