收藏
回答

求助官方 getRealtimeLogManager 5Kb长度的限制?

RealtimeLogManager.info()

日志内容,可以有任意多个。每次调用的参数的总大小不超过5Kb



现在看到超过5Kb就会显示 UserLog:fail Log Size xxxx Exceed.

我在客户端尝试截断,有时灵有时不灵,有些日志上看到了截断后的信息,有些依然是 UserLog:fail Log Size xxxx Exceed.

1,请求官方在接口上自动截断,尽量显示日志信息;

2,望指教下 5Kb 应该怎么计算才能准确无误?

直接把 console.log 封装了 RealtimeLogManager

if (wx.getRealtimeLogManager) {
  const logger = wx.getRealtimeLogManager()
  let consoleLog=console.log
  function str2ab(str) {
    var buf = new ArrayBuffer(str.length * 2); // 每个字符占用2个字节
    var bufView = new Uint16Array(buf);
    for (var i = 0, strLen = str.length; i < strLen; i++) {
      bufView[i] = str.charCodeAt(i);
    }
    return buf;
  }
  function ab2str(buf) {
    return String.fromCharCode.apply(null, new Uint16Array(buf));
  }
  function wlog(){
      let argumentsX=[...arguments]
      return new Promise(function (success,fail) {
        let params=""
        argumentsX.forEach((val,i)=>{
          let str=JSON.stringify(val);
          if(!str) return;
          params+=str
        })
        let bs=str2ab(params.substr(0,1024*5))
        logger.info(ab2str(bs.slice(0,1024*5)).toString());
        success()
      })
  }
  console.log=function () {
    consoleLog(...arguments)
    wlog(...arguments);
  }
}



最后一次编辑于  09-06
回答关注问题邀请回答
收藏

4 个回答

  • cunjinli
    cunjinli
    09-19

    1,请求官方在接口上自动截断,尽量显示日志信息;

    这个支持下。

    09-19
    赞同 3
    回复 4
    • 🇻 🇰 🇮 🇳 🇬ʷᵃⁿᵍ
      🇻 🇰 🇮 🇳 🇬ʷᵃⁿᵍ
      09-20
      干的漂亮,赞一个
      09-20
      回复
    • 拖鞋威
      拖鞋威
      09-20
      请问小游戏是否支持该接口?
      09-20
      回复
    • 天才星科技
      天才星科技
      10-18
      支持有结果了吗?貌似现在还是这样的提示
      10-18
      回复
    • 路遥
      路遥
      11小时前
      但凡官方能听进去,就不是任性的微信了。。
      11小时前
      回复
  • Bug Engineer
    Bug Engineer
    11-20

    这个API  需要发布了小程序才可以使用么  直接预览我这后台没有任何信息

    11-20
    赞同
    回复
  • 🇻 🇰 🇮 🇳 🇬ʷᵃⁿᵍ
    🇻 🇰 🇮 🇳 🇬ʷᵃⁿᵍ
    09-06

    找了另一种截串,依然不是很灵光,时好时坏的,请大家指点

    //app.js
    // import log from 'utils/realTimeLog'
     
    //ascii 返回长度
    function ascLength(codeat){
      let len=1
      if(codeat>0x4000000){
        len=6
      }else if(codeat>0x200000){
        len=5
      }else if(codeat>65536){
        len=4
      }else if(codeat>2048){
        len=3
      }else{
        len=2
      }
      return len
    }
    //简单计算字节长度
    String.getBlength = function (str) {
      for (var i = str.length, n = 0; i--; ) {
        n += ascLength(str.charCodeAt(i));
      }
      return n;
    }
    //按指定字节截取字符串
    String.cutByte = function(str,len,endstr){
      var len = +len
        ,endstr = typeof(endstr) == 'undefined' ? "..." : endstr.toString();
      function n2(a){ var n = a / 2 | 0; return (n > 0 ? n : 1)} //用于二分法查找
      if(!(str+"").length || !len || len<=0){return "";}
      if(this.getBlength(str) <= len){return str;} //整个函数中最耗时的一个判断,欢迎优化
      var lenS = len - this.getBlength(endstr)
        ,_lenS = 0
        , _strl = 0
      while (_strl <= lenS){
        var _lenS1 = n2(lenS -_strl)
        _strl += this.getBlength(str.substr(_lenS,_lenS1))
        _lenS += _lenS1
      }
      return str.substr(0,_lenS-1) + endstr
    }
    if (wx.getRealtimeLogManager) {
      const logger = wx.getRealtimeLogManager()
      let consoleLog=console.log
      function wlog(){
        let argumentsX=[...arguments]
        return new Promise(function (success,fail) {
          let params=""
          argumentsX.forEach((val,i)=>{
            let str=JSON.stringify(val);
            if(!str) return;
            params+=str
          })
          logger.info(String.cutByte(params,5000));
          success()
        })
      }
      console.log=function () {
        consoleLog(...arguments)
        wlog(...arguments);
      }
    }


    09-06
    赞同
    回复
  • aholy.cium
    aholy.cium
    09-06

    关注下。日志模块官方正在优化,~

    09-06
    赞同
    回复
问题标签