我的app如何收集用戶日誌

版權聲明:本文爲xing_star原創文章,轉載請註明出處!html

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

我的app如何收集用戶日誌,相信很多人對這個話題感興趣,本文將結合本身的實際經歷,分享下本身的作法。android

用郵件收集用戶上報日誌

在上篇文章http://javaexception.com/archives/144 中,我提到了,客戶端日誌文件上傳這一功能,對於我的開發者而言,我的app如何收集用戶日誌,值得思考下。先從bugly等第三方的bug收集講起,他們這些只能收集部分日誌信息,不完整,沒有完整的上下文,也不利於分析問題,另外是crash或者是exception下才會上報日誌,有些業務並不會發生crash或者是exception,這不知足本身的特定需求。若是是用日誌文件的方式記錄日誌呢,這個好,能夠有完整的日誌,要考慮的就是日誌如何上傳的問題了。對於日誌上傳,若是有本身的服務器,那麼也好處理,可是對我的開發者而言,還得配置下才能將日誌上傳到服務器,查閱也麻煩,有的並無服務器,有沒有低成本的實踐方式呢,有的,能夠考慮用郵件上傳日誌的方式。git

這是在最近的一個app上實踐的方案,不必定完美,可是目前適用於本身的app,若是用戶量過於龐大,這種方式可能也不行,適合前期階段。採用的是郵件上傳日誌文件的方式(日誌文件是用xlog收集的日誌),郵箱是在163上註冊的新郵箱,經過受權碼的方式,在客戶端發送郵件到指定郵箱,不用擔憂帳號密碼泄漏。全部的日誌都集中在郵箱中,查閱也至關方便。github

先推薦一個開源項目,https://github.com/LillteZheng/ZMail,這個項目封裝了郵件api,下降了開發者的使用成本。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();
    }

代碼混淆配置:app

-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的使用門檻ide

xlog地址 https://github.com/elvishew/xLog 將客戶端日誌保存到日誌文件

其餘:

zmail除了能夠作日誌收集,也能夠用來實現用戶意見反饋。

相關文章
相關標籤/搜索