微信小程序打夯之旅(十)- 实时日志

3,020 阅读2分钟

概述

谢天谢地,小程序终于出这个功能了,小程序上线后,如果用户反馈问题真的很难排查问题,我们能够收集的资料极其有限,小程序推出实时日志真的可以有效帮助定位问题。

环境说明

  • 基础库:2.7.1
  • 日志查询地址:开发 -> 运维中心 -> 实时日志,体验版也可以上传,但是必须在真机上

如何对接

调用起来非常方便,获取小程序日志管理器 wx.getRealtimeLogManager,然后通过 infowarnerror 等方法打印不同类型的日志。

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。