概述
謝天謝地,小程序終于出這個(gè)功能了,小程序上線后,如果用戶反饋問題真的很難排查問題,我們能夠收集的資料極其有限,小程序推出實(shí)時(shí)日志真的可以有效幫助定位問題。
環(huán)境說明
- 基礎(chǔ)庫:
2.7.1 - 日志查詢地址:開發(fā) -> 運(yùn)維中心 -> 實(shí)時(shí)日志,體驗(yàn)版也可以上傳,但是必須在真機(jī)上
如何對接
調(diào)用起來非常方便,獲取小程序日志管理器 wx.getRealtimeLogManager,然后通過 info、warn、error 等方法打印不同類型的日志。
const log = wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : null;
if (!log) return;
log.info('hello, info');
log.warn('hello, warn');
log.error('hello, error');
也可以通過設(shè)置過濾關(guān)鍵字來幫助日志篩選。
log.setFilterMsg('filterkeyword');
log.addFilterMsg('addfilterkeyword');
封裝到 page 通用能力中
每次都寫一遍比較麻煩,還容易出錯(cuò),所以可以進(jìn)行一些封裝。下面為 app.js
onLaunch() {
this.enhancePage();
},
// 增強(qiáng)Page能力,小程序不支持prototype的形式拓展能力
enhancePage() {
const oPage = Page;
Page = config => oPage(Object.assign(config, {
$logger: this.getLogger(),
}));
},
// 獲取日志打印器
getLogger() {
const log = wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : null;
return {
info: () => log && log.info.apply(log, arguments),
warn: () => log && log.warn.apply(log, arguments),
error: () => log && log.error.apply(log, arguments),
setFilterMsg: msg => log && log.setFilterMsg && log.setFilterMsg(msg),
addFilterMsg: msg => log && log.addFilterMsg && log.addFilterMsg(msg),
}
}
在頁面中進(jìn)行使用
Page({
onLoad() {
this.$logger.info('just test');
}
})
注意事項(xiàng)
- 為了定位問題方便,日志是按頁面劃分的,某一個(gè)頁面,在onShow到onHide(切換到其它頁面、右上角圓點(diǎn)退到后臺)之間打的日志,會聚合成一條日志上報(bào),并且在小程序管理后臺上可以根據(jù)頁面路徑搜索出該條日志。
- 每個(gè)小程序賬號每天限制100萬條日志,日志會保留三天,建議遇到問題及時(shí)定位。
- 一條日志的上限是5KB,最多包含200次打印日志函數(shù)調(diào)用(info、warn、error調(diào)用都算),所以要謹(jǐn)慎打日志,避免在循環(huán)里面調(diào)用打日志接口,避免直接重寫console.log的方式打日志。
- 意見反饋里面的日志,可根據(jù)OpenID搜索日志。
- setFilterMsg可以設(shè)置過濾的Msg。這個(gè)接口的目的是提供某個(gè)場景的過濾能力,例如setFilterMsg('scene1'),則在MP上可輸入scene1查詢得到該條日志。比如上線過程中,某個(gè)監(jiān)控有問題,可以根據(jù)FilterMsg過濾這個(gè)場景下的具體的用戶日志。FilterMsg僅支持大小寫字母。如果需要添加多個(gè)關(guān)鍵字,建議使用addFilterMsg替代setFilterMsg。