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();