版權聲明:本文為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除了可以做日志收集,也可以用來實現用戶意見反饋。