数以百万计的项目包依赖于非常流行的 debug
包。提供的 debug
方法使 Node.js 开发人员能够控制日志消息传递。与常使用的 console.log
相反,使用 debug
的消息在默认情况下是隐藏的。
debug
日志消息被绑定到一个模块名,只有当 debug
环境变量列出特定模块名时才会出现。
// 只有当设置 DEBUG=http 时记录消息
const debug = require('debug')('http')
debug('booting %o', name)
Node.js 内置了类似的功能。util.debuglog
方法提供了几乎相同的功能。
让我们看一个示例:
// index.js
const util = require('util')
const debuglog = util.debuglog('app')
debuglog('hello from my debugger [%d]', 123)
在终端中运行此代码时,将不会看到任何日志消息。但是,当您定义在 app
日志消息中进行测试并定义环境变量 NODE_ DEBUG=app
时,日志消息将显示:
$ NODE_DEBUG=app node index.js
APP 1000: hello from my debugger [123]
util.debuglog
甚至支持通配符(*
),以防您希望同时为不同的模块启用日志消息。
// index.js
const util = require('util')
const logGeneral = util.debuglog('app-general')
const logTimer = util.debuglog('app-timer')
const delay = 500
logGeneral('启动应用程序')
setTimeout(() => {
logTimer('%d 秒后计时器启动', delay)
}, delay)
使用 app-*
环境变量运行脚本会导致以下结果:
$ NODE_DEBUG=app-* node index.js
APP-GENERAL 7384: 启动应用程序
APP-TIMER 7384: 500 秒后计时器启动
NODE_DEBUG
环境变量还可以用于从 Node.js 内部获取调试消息。您可能偶尔会在 Node.js 文档中遇到它。
了解 util.debuglog
很好,但它没有涵盖 debug
包的所有功能。对我来说,util.debuglog
是小型项目中 debug
包的一个很好的替代方案。