debugging(调试)


日志

Video.js包含videojs.log,一个console API的轻量级包装器,可用的方法包括videojs.logvideojs.log.debugvideojs.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() n/a n/a
videojs.log.level() n/a n/a
videojs.log.history() n/a n/a
videojs.log.history.clear() n/a n/a
videojs.log.history.disable() n/a n/a
videojs.log.history.enable() n/a n/a
videojs.log.history.filter() n/a n/a

有关这些方法的说明,请参阅以下例子。


Log安全性

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


Log对象

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

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


创建新的Logger

有时,你需要创建一个新的模块或插件,并用标签记录消息。就像所有这些日志都用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


日志级别

与控制台不同,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


可用的日志级别

  • 信息(默认值):仅显示log,log.warn和log.error消息
  • all:启用所有日志记录方法
  • 错误:仅显示log.error消息
  • off:禁用所有日志记录方法
  • 警告:仅显示log.warn 和 log.error消息
  • 调试:显示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']]


上一篇:component(组件) 下一篇:embeds(引入)