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()

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

日志安全

与控制台不同,在代码中保留 videojs.log 调用是安全的。当 console 不存在时,它们不会出错。

使用日志对象

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

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Video.js</title>
    <!-- 引入 Video.js 样式 -->
    <link href="https://vjs.zencdn.net/8.10.0/video-js.css" rel="stylesheet" />
    <!-- 如果您想支持 IE8(适用于 v7 之前的 Video.js 版本) -->
    <!-- <script src="https://vjs.zencdn.net/ie8/1.1.2/videojs-ie8.min.js"></script> -->
</head>
<body>
    <div id="container">
        <video id="vid1" class="video-js"
               data-setup='{"preload":"auto","controls":true,"width":"640","height":"264px",
                        "poster":"../resources/oceans.jpg"}'>
            <source src="../resources/oceans.mp4" type="video/mp4" />
            <source src="../resources/oceans.webm" type="video/webm" />
        </video>
    </div>

    <!-- 引入 Video.js 库 -->
    <script src="https://vjs.zencdn.net/8.10.0/video.min.js"></script>
    <script>
        let player = videojs('vid1');
        // 看这里
        videojs.log('this is a string', {butThis: 'is an object'});
    </script>
</body>
</html>

运行示例,如下图:

Video.js 调试

创建新日志记录器

有时,您想创建一个新模块或插件,并记录带有标签的信息。就像所有这些日志都以 VIDEOJS: 作为前缀一样。您可以通过 createLogger 方法做到这一点。该方法接收一个名称,并返回一个类似 videojs.log 的日志对象。如下示例:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Video.js</title>
    <!-- 引入 Video.js 样式 -->
    <link href="https://vjs.zencdn.net/8.10.0/video-js.css" rel="stylesheet" />
    <!-- 如果您想支持 IE8(适用于 v7 之前的 Video.js 版本) -->
    <!-- <script src="https://vjs.zencdn.net/ie8/1.1.2/videojs-ie8.min.js"></script> -->
</head>
<body>
    <div id="container">
        <video id="vid1" class="video-js"
               data-setup='{"preload":"auto","controls":true,"width":"640","height":"264px",
                        "poster":"../resources/oceans.jpg"}'>
            <source src="../resources/oceans.mp4" type="video/mp4" />
            <source src="../resources/oceans.webm" type="video/webm" />
        </video>
    </div>

    <!-- 引入 Video.js 库 -->
    <script src="https://vjs.zencdn.net/8.10.0/video.min.js"></script>
    <script>
        let player = videojs('vid1');
        // 看这里
        const mylogger = videojs.log.createLogger('mylogger');
        mylogger('hello world!');
        // > VIDEOJS: mylogger: hello world!

        const anotherlogger = mylogger.createLogger('anotherlogger');
        anotherlogger('well, hello there');
        // > VIDEOJS: mylogger: anotherlogger: well, hello there
    </script>
</body>
</html>

运行示例,如下图:

Video.js 调试

日志级别

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

级别通过 videojs.log.level 方法公开。该方法既是当前日志级别的获取器,也是设置器。在没有参数的情况下,它会返回当前日志记录级别:

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

通过传递字符串,可将日志记录级别更改为可用的日志记录级别之一:

videojs.log.level('error'); // 只显示错误信息,不显示其他信息
videojs.log('foo'); // 什么也不做
videojs.log.warn('foo'); // 什么也不做
videojs.log.error('foo'); // 将 "foo" 记录为错误

可用日志级别

info(默认):只显示 log、log.warn 和 log.error 信息

all:启用所有日志记录方法

error:只显示 log.error 消息

off:禁用所有日志记录方法

warn:只显示 log.warn 和 log.error 消息

debug:显示 log、log.debug、log.warn 和 log.error 信息

debug 日志

尽管日志级别试图与 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(); // 迄今为止所有记录的数组

即使日志记录设置为关闭(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']]
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号