数以百万计的项目包依赖于非常流行的 debug 包。提供的 debug 方法使 Node.js 开发人员能够控制日志消息传递。与常使用的 console.log 相反,使用 debug 的消息在默认情况下是隐藏的。
debug 日志消息被绑定到一个模块名,只有当 debug 环境变量列出特定模块名时才会出现。
// 只有当设置 DEBUG=http 时记录消息
const debug = require('debug')('http')
debug('booting %o', name)
util.debuglog —原生的 debug 备选方案
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 包的一个很好的替代方案。









网友评论