zoukankan      html  css  js  c++  java
  • 个人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("用户上传了客户端日志,请查收!
    系统参数如下:
    ");
            sbf.append("手机厂商:").append(SystemUtils.getDeviceBrand()).append("
    ")
                    .append("手机型号").append(SystemUtils.getSystemModel()).append("
    ")
                    .append("手机当前系统语言:").append(SystemUtils.getSystemLanguage()).append("
    ")
                    .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除了可以做日志收集,也可以用来实现用户意见反馈。

  • 相关阅读:
    nginx.conf中配置laravel框架站点
    centos6.4下安装php7+nginx+mariadb环境
    Windows Terminal 安装和运行
    微软 WSL 重装操作系统
    Pulumi 如何在 Windows 环境中设置
    Ubuntu 20.04 安装 JDK
    代码的 Lint 是什么意思
    CentOS 8 手动安装 Go 1.16 版本
    Raspberry Pi 安装 go 后提示错误 Exec format error
    系统管理--查看网卡、内存等
  • 原文地址:https://www.cnblogs.com/xing-star/p/11097034.html
Copyright © 2011-2022 走看看