Video.js 指南
这些指南涵盖了 Video.js 用户的各种主题
调试
日志记录
Video.js 包含 videojs.log
,它是 console
API 子集的一个轻量级包装器。可用方法包括 videojs.log
、videojs.log.debug
、videojs.log.warn
和 videojs.log.error
。
API 概览
这些方法大都一目了然,但要了解完整详情,请参阅 API 文档。
方法 | 别名 | 匹配级别 |
---|---|---|
videojs.log() | console.log | all, debug, info |
videojs.log.debug() | console.debug | all, debug |
videojs.log.warn() | console.warn | all, debug, info, warn |
videojs.log.error() | console.error | all, 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 (默认): 仅显示
log
、log.warn
和log.error
消息 - all: 启用所有日志记录方法
- error: 仅显示
log.error
消息 - off: 禁用所有日志记录方法
- warn: 仅显示
log.warn
和log.error
消息 - debug: 显示
log
、log.debug
、log.warn
和log.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,这也将起作用。
这可能很有用,但也可能导致内存泄漏。例如,即使在其他地方删除了引用,已记录的对象仍将保留在历史记录中!
为避免此问题,可以通过方法调用(分别使用 disable
和 enable
方法)来禁用或启用历史记录。禁用历史记录非常简单,只需
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']]