JavaScript 日志记录

本文档详细介绍了 JavaScript 中的日志记录。有关基于 c++ 的日志记录,请参阅 Gecko 日志记录文档

关于日志记录的说明

日志记录原则

一般的原则是在默认情况下保持浏览器控制台“干净”,不输出日志,除非遇到错误或潜在的警告。

还有一个 测试,如果启动时有任何意外的日志,该测试将失败。

对于需要使用调试日志记录的情况,通常可以通过首选项启用默认情况下关闭的日志记录来解决。

还要注意,即使未显示开发者工具,控制台日志记录也会对性能产生影响。

已弃用的实用程序

在代码树中,有两个模块应该被视为已弃用:Log.sys.mjsConsole.sys.mjs。作为 一个日志记录器 工作的一部分,现有用法应该过渡到使用 console.createInstance

console 对象在 Firefox 代码库的所有区域都可用,并且与开发者工具的集成比现有模块更好。

使用 Console Web API 进行日志记录

Console Web API 在整个 Firefox 代码库中可用。它是最佳工具,因为它直接与 开发者工具 集成,后者提供了详细的日志记录功能。

默认情况下,日志将输出到浏览器控制台,根据控制台中本身选择的进程和过滤器。

日志也可以通过 devtools.console.stdout.chrome 首选项输出到标准输出。默认情况下,对于非官方版本,此选项设置为 true,对于官方版本,此选项设置为 false,这意味着大多数情况下,开发人员无需更改它。

console.createInstance

在某些情况下,将日志记录归因于特定模块或由首选项控制很有用。在这种情况下,可以使用 console.createInstance 创建特定的日志记录实例。

例如

const lazy = {};

ChromeUtils.defineLazyGetter(lazy, "logConsole", () => {
  return console.createInstance({
    maxLogLevelPref: "browser.download.loglevel",
    prefix: "Downloads",
  });
});

首选项可能具有典型的默认值 Error。可用级别列在 Console.webidl 中。

这将创建一个延迟初始化的控制台实例,可以使用如下方式:

// Logs by default.
lazy.logConsole.error("Something bad happened");

// Doesn't log unless the preference was changed prior to logging.
lazy.logConsole.debug("foo", 123)

注意:Worker 无法访问首选项,因此必须使用 maxLogLevel 而不是 maxLogLevelPref

console.createInstance 的其他选项

console.createInstance 可以传递其他选项。请参阅 ConsoleInstanceOptions 在 Web IDL 中了解更多详细信息

其中最有用的可能是 maxLogLevel,它允许手动设置日志级别,这对于从其他日志记录系统(其中已存在首选项)过渡到 console.createInstance 可能很有用。