個人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除了可以做日志收集,也可以用來實現用戶意見反饋。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM