Video.js 指南

这些指南涵盖了 Video.js 用户的各种主题

调试

日志记录

Video.js 包含 videojs.log,它是 console API 子集的一个轻量级包装器。可用方法包括 videojs.logvideojs.log.debugvideojs.log.warnvideojs.log.error

API 概览

这些方法大都一目了然,但要了解完整详情,请参阅 API 文档

方法别名匹配级别
videojs.log()console.logall, debug, info
videojs.log.debug()console.debugall, debug
videojs.log.warn()console.warnall, debug, info, warn
videojs.log.error()console.errorall, debug, info, warn, error
videojs.log.createLogger()不适用不适用
videojs.log.level()不适用不适用
videojs.log.history()不适用不适用
videojs.log.history.clear()不适用不适用
videojs.log.history.disable()不适用不适用
videojs.log.history.enable()不适用不适用
videojs.log.history.filter()不适用不适用

有关这些功能的说明,请参阅以下章节。

安全记录日志

console 不同,将 videojs.log 调用留在代码中是安全的。当 console 不存在时,它们不会抛出错误。

高效记录对象

console 类似,可以将任意数量的混合类型值传递给 videojs.log 方法

videojs.log('this is a string', {butThis: 'is an object'});

创建新的日志记录器

有时,您可能希望创建一个新模块或插件,并用标签记录消息。就像所有这些日志都以 VIDEOJS: 为前缀一样。您可以通过 createLogger 方法实现这一点。它接受一个名称,并返回一个类似 videojs.log 的日志对象。示例如下:

const mylogger = videojs.log.createLogger('mylogger');

mylogger('hello world!');
// > VIDEOJS: mylogger: hello world!

// We can even chain it further
const anotherlogger = mylogger.createLogger('anotherlogger');

anotherlogger('well, hello there');
// > VIDEOJS: mylogger: anotherlogger: well, hello there

日志级别

console 不同,videojs.log 包含了日志级别的概念。这些级别可以切换日志记录方法的开启或关闭。

级别通过 videojs.log.level 方法暴露。此方法既可以作为当前日志级别的获取器,也可以作为设置器。不带任何参数时,它返回当前的日志级别。

videojs.log.level(); // "info"

通过传入一个字符串,可以将日志级别更改为其中一个可用日志级别。

videojs.log.level('error'); // show only error messages and suppress others
videojs.log('foo'); // does nothing
videojs.log.warn('foo'); // does nothing
videojs.log.error('foo'); // logs "foo" as an error

可用日志级别

  • info (默认): 仅显示 loglog.warnlog.error 消息
  • all: 启用所有日志记录方法
  • error: 仅显示 log.error 消息
  • off: 禁用所有日志记录方法
  • warn: 仅显示 log.warn log.error 消息
  • debug: 显示 loglog.debuglog.warnlog.error 消息

调试日志记录

尽管日志级别试图匹配其 window.console 对应项,但 window.console.debug 并非在所有平台上都可用。因此,它将使用最接近的可比较方法,从 window.console.debug 回退到 window.console.info,再到 window.console.log,如果这些方法都不可用,则最终不执行任何操作。

历史记录

注意: 在 Video.js 5 中,videojs.log.history 是一个数组。自 Video.js 6 起,它是一个返回数组的函数。此更改旨在提供更丰富、更安全的日志历史记录 API。您还可以根据日志记录器的名称过滤历史记录。

默认情况下,videojs.log 模块会跟踪传递给它的所有内容的历史记录,无论日志级别如何。

videojs.log.history(); // an array of everything that's been logged up to now

即使日志记录设置为 off,这也将起作用。

这可能很有用,但也可能导致内存泄漏。例如,即使在其他地方删除了引用,已记录的对象仍将保留在历史记录中!

为避免此问题,可以通过方法调用(分别使用 disableenable 方法)来禁用或启用历史记录。禁用历史记录非常简单,只需

videojs.log.history.disable();

最后,历史记录(如果已启用)可以随时通过以下方式清除:

videojs.log.history.clear();

历史记录过滤

如果您想查找由特定日志记录器创建的所有历史记录,可以通过 history.filter() 实现。给定一个名为 foo 的特定日志记录器,您可以将 foo 传递给 history.filter() 以获取由 foo 记录的所有条目。示例如下:

const mylogger = videojs.log.createLogger('mylogger');
const anotherlogger = mylogger.createLogger('anotherlogger');

videojs.log('hello');
mylogger('how are you');
anotherlogger('today');

videojs.log.history.filter('VIDEOJS');
// > [['VIDEOJS:', 'hello'], ['VIDEOJS: mylogger:', 'how are you'], ['VIDEOJS: mylogger: anotherlogger:', 'today']]
videojs.log.history.filter('mylogger');
// > [['VIDEOJS:    mylogger:', 'how are you'], ['VIDEOJS: mylogger: anotherlogger:', 'today']]
videojs.log.history.filter('anotherlogger');
// > [['VIDEOJS: mylogger: anotherlogger:', 'today']]