LogRocket
版本
- v1.0.1 「2024-12-06」
簡介
當前開發(fā)者可在AS控制臺查看日志,或者通過adb查看日志籽孙,對于開發(fā)大有幫助烈评;發(fā)生異常也可通過日志上報到日志平臺去查看,十分便捷犯建;
LogRocket換了一個角度讲冠,從測試者的角度出發(fā);
開發(fā)者應該遇到過一些情況:
- 接口數(shù)據(jù)不對适瓦,測試人員直接拿著手機找過來竿开,說報錯了,好一點的可能會自己會抓包查看網(wǎng)絡接口玻熙;不好的就不說了否彩。
- 一些日志崩潰也是如此,測著測著嗦随,突然閃退列荔,接了日志系統(tǒng)還好,還能去查看到底什么原因導致的,如果沒接入贴浙,則需要測試人員反復的去猜測復現(xiàn)砂吞,十分不便;
- 接口出了問題崎溃,后端找測試要參數(shù)蜻直,然后測試自己去抓包或者去找移動端開發(fā);
- ....
真想給每個測試人員安裝一個AS
整個就是基于這種小處境出發(fā)袁串,解決測試人員查看日志的問題袭蝗;
LogRocket基于此出發(fā),將終端設備作為Server般婆,直接將logcat的日志通過ws直接發(fā)送出來到腥,開發(fā)者可在日志中加入網(wǎng)絡接口打印,以及一些日常打印蔚袍,測試人員可直接訪問對應的ws地址就可直接閱讀網(wǎng)絡請求以及崩潰日志乡范。
可第一時間發(fā)現(xiàn)問題并保留日志信息及時反饋,減少中間流轉時間啤咽,提升效率晋辆。
對代碼的影響
LogRocket建議僅僅在開發(fā)環(huán)境中使用,不建議上生產(chǎn)環(huán)境宇整,以免引發(fā)不必要的錯誤瓶佳;
為了實現(xiàn)這種解耦,于是將WebSocket得開啟和關閉放在了Provider中鳞青,然后通過「debugImplementation」得方式進行依賴霸饲,這樣在生產(chǎn)環(huán)境自動剔除,避免了對生產(chǎn)環(huán)境的干擾臂拓。
另外厚脉,終端既然作為Server端,那他就得提供一個ws地址胶惰,開發(fā)者可直接在wifi鏈接頁面去查看自己手機的ip傻工;通過LogRocket也提供了方法去獲取對應終端的ip。
端口號是采用隨機分配的空閑端口號孵滞,因為一個人可能會負責多個應用的開發(fā)中捆,同一臺設備,同一個網(wǎng)絡下坊饶,不能同一個端口泄伪,故每次生成的ws鏈接端口號都不同。
這里LogRocket也提供的方法來獲取整個ws的訪問地址幼东;
于是這里就會有一個問題臂容,既然是采用「debugImplementation」得方式進行依賴科雳,那肯定不能直接使用LogRocket的方法,不然在生產(chǎn)環(huán)境會因為沒有依賴找不到對應的Class而報錯脓杉,所以這里又提供了一個類糟秘,專門用于反射獲取ws地址的。
對于知負責一個應用的開發(fā)者球散,如果會覺得每次更換端口顯得很麻煩尿赚,想固定端口,這個也是提供了解決辦法蕉堰,可以在AndroidManifest.xml中配置凌净;
在application節(jié)點中加入以下配置(默認值為false):
<meta-data
android:name="uniquePort"
android:value="true" />
這里又有了一個問題,ws有了屋讶,難道還要找個ws測試網(wǎng)站去看日志冰寻?這個可以開發(fā)者自行實現(xiàn),但是LogRocket也提供了一個默認h5頁面皿渗,可以直接去查看斩芭,對應的文件為index.html。
這個index.html也是我去找ChatGpt生成的乐疆,還帶了日志過濾划乖,方便使用者過濾日志。如果您覺得UI不太好看挤土,或者功能過于簡陋琴庵,可以自行找ChatGpt去定制生成,或者讓前端同學幫忙搞搞仰美。
因為就只是臨時起意的一個小工具迷殿,所以就不想去搭服務器放網(wǎng)頁,所以直接把h5文件放到了github上筒占,或者直接通過瀏覽器訪問github上的這個index.html即可贪庙。
對于index.html,輸入ws鏈接翰苫,回車即可;
注意點
需要保持ws的Server和Client在同一網(wǎng)絡
接入使用方式
倉庫引入
repositories {
maven { url = uri("https://jitpack.io") }
google()
mavenCentral()
}
依賴引入
debugImplementation 'com.github.xieyang94.LogRocket:log-rocket:v1.0.1'
固定端口配置
默認非固定端口(false)
<meta-data
android:name="uniquePort"
android:value="true" />
反射獲取ws鏈接
class Test {
public String getWsAddress(Context context) {
String result = null; // 默認值这橙,如果反射調用失敗則返回此值
try {
// 獲取MetaUtil類的Class對象
Class<?> metaUtilClass = Class.forName("cn.net.yto.logrocket.refect.ReflectLogRocket");
// 獲取getPort方法的Method對象
Method getPortMethod = metaUtilClass.getMethod("wdAddress", Context.class);
// 調用getPort方法
// 注意:如果getPort是非公開方法奏窑,可能需要設置accessible為true
getPortMethod.setAccessible(true);
// 創(chuàng)建MetaUtil類的實例
Object metaUtilInstance = metaUtilClass.newInstance();
// 調用invoke方法執(zhí)行getPort(context)
result = (String) getPortMethod.invoke(metaUtilInstance, context);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
被反射的類:
public class ReflectLogRocket {
/**
* 反射獲取ws地址
*
* @param context
* @return
*/
public String wdAddress(Context context) {
return LogRocket.getInstance().getWsAddress(context);
}
}
您也可以不采用這種用法,可以直接把代碼拷貝到您的項目中屈扎,然后直接調用埃唯。
Demo
Demo樣式
Github項目地址
可下載apks目錄下的apk體驗下,在github上的index.html進行ws的訪問會因為https和ws之間的協(xié)議問題不能暢通鹰晨,所以訪問時需要將index.html的訪問協(xié)議從https改為http即可墨叛。
其他
有問題可以反饋止毕,我會盡最大的努力解決或采納。