概述
谢天谢地,小程序终于出这个功能了,小程序上线后,如果用户反馈问题真的很难排查问题,我们能够收集的资料极其有限,小程序推出实时日志真的可以有效帮助定位问题。
环境说明
- 基础库:
2.7.1
- 日志查询地址:开发 -> 运维中心 -> 实时日志,体验版也可以上传,但是必须在真机上
如何对接
调用起来非常方便,获取小程序日志管理器 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');
也可以通过设置过滤关键字来帮助日志筛选。
log.setFilterMsg('filterkeyword');
log.addFilterMsg('addfilterkeyword');
封装到 page
通用能力中
每次都写一遍比较麻烦,还容易出错,所以可以进行一些封装。下面为 app.js
onLaunch() {
this.enhancePage();
},
// 增强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),
}
}
在页面中进行使用
Page({
onLoad() {
this.$logger.info('just test');
}
})
注意事项
- 为了定位问题方便,日志是按页面划分的,某一个页面,在onShow到onHide(切换到其它页面、右上角圆点退到后台)之间打的日志,会聚合成一条日志上报,并且在小程序管理后台上可以根据页面路径搜索出该条日志。
- 每个小程序账号每天限制100万条日志,日志会保留三天,建议遇到问题及时定位。
- 一条日志的上限是5KB,最多包含200次打印日志函数调用(info、warn、error调用都算),所以要谨慎打日志,避免在循环里面调用打日志接口,避免直接重写console.log的方式打日志。
- 意见反馈里面的日志,可根据OpenID搜索日志。
- setFilterMsg可以设置过滤的Msg。这个接口的目的是提供某个场景的过滤能力,例如setFilterMsg('scene1'),则在MP上可输入scene1查询得到该条日志。比如上线过程中,某个监控有问题,可以根据FilterMsg过滤这个场景下的具体的用户日志。FilterMsg仅支持大小写字母。如果需要添加多个关键字,建议使用addFilterMsg替代setFilterMsg。