微信小程式「實時日誌」幫你快速找到bug

  • 2019 年 10 月 4 日
  • 筆記

背景:

為幫助小程式開發者快捷地排查小程式漏洞、定位問題,微信官方推出了實時日誌功能。從基礎庫2.7.1開始,開發者可通過提供的介面列印日誌,日誌匯聚並實時上報到小程式後台。開發者可從小程式管理後台「開發->運維中心->實時日誌」進入日誌查詢頁面,查看開發者列印的日誌資訊。

如何使用:

1、調用相關介面。打日誌的介面是wx.getRealtimeLogManager,為了兼容舊的版本,建議使用如下程式碼封裝一下,例如封裝在log.js文件裡面:

var log = wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : null    module.exports = {    debug() {      if (!log) return      log.debug.apply(log, arguments)    },    info() {      if (!log) return      log.info.apply(log, arguments)    },    warn() {      if (!log) return      log.warn.apply(log, arguments)    },    error() {      if (!log) return      log.error.apply(log, arguments)    },    setFilterMsg(msg) { // 從基礎庫2.7.3開始支援      if (!log || !log.setFilterMsg) return      if (typeof msg !== 'string') return      log.setFilterMsg(msg)    },    addFilterMsg(msg) { // 從基礎庫2.8.1開始支援      if (!log || !log.addFilterMsg) return      if (typeof msg !== 'string') return      log.addFilterMsg(msg)    }  }

2、在頁面的具體位置列印日誌:

var log = require('./log.js') // 引用上面的log.js文件  log.info('hello test hahaha') // 日誌會和當前打開的頁面關聯,建議在頁面的onHide、onShow等生命周期裡面打  log.warn('warn')  log.error('error')  log.setFilterMsg('filterkeyword')  log.setFilterMsg('addfilterkeyword')

完整的例子可以參考程式碼片段:https://developers.weixin.qq.com/s/aFYw1BmC7eak

如何查看日誌:

登陸小程式管理後台,從「開發->運維中心->實時日誌」進入日誌查詢頁面。開發者可通過設置時間、微訊號/OpenID、頁面鏈接、FilterMsg內容(基礎庫2.7.3及以上支援setFilterMsg)等篩選條件查詢指定用戶的日誌資訊。

注意事項:

由於後台資源限制,「實時日誌」使用規則如下

  1. 為了定位問題方便,日誌是按頁面劃分的,某一個頁面,在onShow到onHide(切換到其它頁面、右上角圓點退到後台)之間打的日誌,會聚合成一條日誌上報,並且在小程式管理後台上可以根據頁面路徑搜索出該條日誌
  2. 每個小程式帳號每天限制100萬條日誌,日誌會保留三天,建議遇到問題及時定位。
  3. 一條日誌的上限是5KB,最多包含200次列印日誌函數調用(info、warn、error調用都算),所以要謹慎打日誌,避免在循環裡面調用打日誌介面,避免直接重寫console.log的方式打日誌。
  4. 意見回饋裡面的日誌,可根據OpenID搜索日誌。
  5. setFilterMsg可以設置過濾的Msg。這個介面的目的是提供某個場景的過濾能力,例如setFilterMsg('scene1'),則在MP上可輸入scene1查詢得到該條日誌。比如上線過程中,某個監控有問題,可以根據FilterMsg過濾這個場景下的具體的用戶日誌。FilterMsg僅支援大小寫字母。如果需要添加多個關鍵字,建議使用addFilterMsg替代setFilterMsg。