2022-03-21

AndroidLogCenter

Android對(duì)接日志中心模塊

目前日志上報(bào)模塊還不夠完善,我App這邊也僅僅簡(jiǎn)單的使用到。需要深度使用該功能的,這個(gè)項(xiàng)目?jī)H僅提供參考,當(dāng)然也可以在此項(xiàng)目上進(jìn)行完善和修改。

目前日志上報(bào)是代碼埋點(diǎn)的方式,在使用到的時(shí)候手動(dòng)收集日志保存或者即時(shí)上傳。將收集數(shù)據(jù)的代碼直接寫在需要的地方,當(dāng)用戶點(diǎn)擊某個(gè)控件或者打開某個(gè)頁面時(shí)調(diào)用到該部分代碼完成數(shù)據(jù)的收集。

為了控制頻繁的存儲(chǔ)和上傳邏輯,想法是:

  • 1創(chuàng)建一個(gè)帶隊(duì)列的線程。
  • 2把要上報(bào)的數(shù)據(jù)拋入線程隊(duì)列中。
  • 3數(shù)據(jù)過多本地寫入文件。
  • 4線程異步開始上報(bào)。
  • 5上報(bào)完成后刪除本地文件。

這里簡(jiǎn)單的實(shí)現(xiàn)了創(chuàng)建一個(gè)靜態(tài)的單例管理類,類里面創(chuàng)建一個(gè)集合,用來存放每一次的數(shù)據(jù),當(dāng)數(shù)據(jù)夠20條的時(shí)候,將數(shù)據(jù)保存到本地。
為了防止寫文件線程來不及寫入文件,此時(shí)應(yīng)用發(fā)生crash或app被殺,導(dǎo)致上報(bào)數(shù)據(jù)丟失。demo里面用LifecycleObserver監(jiān)聽?wèi)?yīng)用的生命周期,在監(jiān)聽到ON_STOP的時(shí)候,將緩存的日志保存寫入。

以上是這個(gè)模塊的大體思考和部分實(shí)現(xiàn),有實(shí)際用到的可以用于參考。

模塊初始化

/**
 * @param context
 * @param applicationName
 * @param evn
 * @param deviceName      不傳的話,可填"",用log-center自帶拿設(shè)備code的方法
 * @param isPrintLog      使用logCenterUtils是否打印log到logcat中,建議應(yīng)用發(fā)布的時(shí)候,改成false,保證應(yīng)用安全性
 */

//applicationName為總后對(duì)應(yīng)的appId
String applicationName = "你的項(xiàng)目工程在后臺(tái)對(duì)應(yīng)的名字,可以直接填updateKey";

/**
 * 環(huán)境說明
 * 0測(cè)試 對(duì)應(yīng)日志中fat測(cè)試
 * 1堡壘 對(duì)應(yīng)日志中uat堡壘
 * 2正式 對(duì)應(yīng)日志中pro正式
 */
int evn = 0;
在工程的application中加入,

LogCenter.getInstance().init(this, Constant.NEW_UPDATE_KEY, Constant.ENV, PhoneUtils.getDeviceUniqueID(), BaseLibConstant.isPrintLog);

實(shí)例使用

即時(shí)上報(bào)日志用法,上報(bào)UI事件類型

LogCenterCoreUi ui = new LogCenterCoreUi();
ui.setEvent("什么事件");
ui.setLevel("debug");
ui.setLog("填寫自定義上報(bào)的日志內(nèi)容");
LogCenterCoreBase coreBase = new LogCenterCoreBase.ParamBuilder()
   setOutParameter(JSON.toJSONString(ui))
   .setType("ui")
   .build();
LogCenter.getInstance().logRealTimeUpload(coreBase);

快捷上傳及日志打印LogCenterUtils的使用

LogCenterUtils.e("pay", "test log" );
//和logUtils使用差不多,但是多了個(gè)上傳到服務(wù)器,可以在初始化的時(shí)候,控制是否打印到logcat中,來保證應(yīng)用的安全性

上傳設(shè)備常用信息,網(wǎng)絡(luò),內(nèi)存,app版本

LogCenterUtils.d(DeviceInfo.getDeviceInfoStatus(this));

上報(bào)Socket事件類型

LogCenterCoreSocket socket = new LogCenterCoreSocket();
socket.setKey("");
socket.setValue("");
LogCenterCoreBase coreBase = new LogCenterCoreBase.ParamBuilder()
    .setOutParameter(JSON.toJSONString(socket))
    .setType("socket")
    .build();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • linux命令: 5.創(chuàng)建文件:(三種方式) 1.touch xx.xx 2.vim/vi xx.xx 【編輯文件...
    3e212de327d7閱讀 389評(píng)論 0 0
  • Linux內(nèi)存工作原理之Buffer/Cache定義 此文章部分內(nèi)容由(小紅書 www.xiaohongshutu...
    xu1234567閱讀 187評(píng)論 0 0
  • 文章目錄前言1.第一問:redis支持哪些數(shù)據(jù)類型:2 第二問:redis持久化方式和說明:2.1 RDB(默認(rèn))...
    一位先生_閱讀 233評(píng)論 0 0
  • 概念 進(jìn)程:指在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序;程序一旦運(yùn)行就是進(jìn)程;進(jìn)程——資源分配的最小單位。 線程:系統(tǒng)分配處...
    姜浩_19強(qiáng)化班閱讀 435評(píng)論 0 2
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 13,898評(píng)論 2 59

友情鏈接更多精彩內(nèi)容