Skip to content

Console 录制器与回放器 ​

从 v1.0.0 开始,我们新增了用于录制和回放控制台输出的插件。 该功能旨在为开发者提供关于 bug 现场的更多信息。录制和回放控制台输出均提供了一些选项。

启用 Console 录制 ​

你可以像这样使用默认选项启用日志记录器:

js
import { record } from '@rrweb/record';
import { getRecordConsolePlugin } from '@rrweb/rrweb-plugin-console-record';

record({
  emit: function emit(event) {
    // you should use console.log in this way to avoid errors.
    const defaultLog = console.log['__rrweb_original__']
      ? console.log['__rrweb_original__']
      : console.log;
    defaultLog(event);
  },
  // to use default record option
  plugins: [getRecordConsolePlugin()],
});

警告:你不应在 emit 函数中调用 console.log(warn、error 等),否则会得到错误:Uncaught RangeError: Maximum call stack size exceeded。 你应该改为调用 console.log.__rrweb_original__()。

你也可以像这样自定义日志记录器的行为:

js
import { record } from '@rrweb/record';
import { getRecordConsolePlugin } from '@rrweb/rrweb-plugin-console-record';

record({
  emit: function emit(event) {
    // you should use console.log in this way to avoid errors.
    const defaultLog = console.log['__rrweb_original__']
      ? console.log['__rrweb_original__']
      : console.log;
    defaultLog(event);
  },
  // customized options
  plugins: [
    getRecordConsolePlugin({
      level: ['info', 'log', 'warn', 'error'],
      lengthThreshold: 10000,
      stringifyOptions: {
        stringLengthLimit: 1000,
        numOfKeysLimit: 100,
        depthOfLimit: 1,
      },
      logger: window.console,
    }),
  ],
});

所有选项说明如下:

键默认值描述
level['log','warn','error',...]默认值包含所有 console 函数的名称。你可以通过设置所需的 console 级别来覆盖它。
lengthThreshold1000控制台输出记录的最大条数。
stringifyOptions{ stringLengthLimit: undefined, numOfKeysLimit: 50, depthOfLimit: 4 }如果 console 输出中包含 js 对象,我们需要将其字符串化。stringLengthLimit 限制单个值的字符串长度。numOfKeysLimit 限制对象中键的数量。depthOfLimit 限制对象的深度。如果对象包含的键超过该限制,我们只会保存对象的名称。你可以通过设置这些选项来减小事件的体积。
loggerwindow.console我们要录制的 console 对象。你可以设置为另一个执行环境中的 console 对象,以录制该环境的输出。

回放 Console ​

如果录制的事件中包含 console 日志类型的数据,我们会在回放时自动播放它们。

js
import { Replayer } from '@rrweb/replay';
import { getReplayConsolePlugin } from '@rrweb/rrweb-plugin-console-replay';

const replayer = new Replayer(events, {
  plugins: [
    getReplayConsolePlugin({
      level: ['info', 'log', 'warn', 'error'],
    }),
  ],
});
replayer.play();

回放选项说明如下:

键默认值描述
level['log','warn','error',...]你可以设置该选项,只播放所需的日志级别。
replayLogger一个基于 console 的对象,实现了 ReplayLogger 接口你也可以通过实现 ReplayLogger 接口来设置一个回放日志记录器,在模拟的浏览器控制台中回放日志消息。