15

NPM酷库,每天两分钟,了解一个流行NPM库。

今天我们要了解的库是debug,一个专门用来控制输出调试日志的库。

通常,我们直接使用 console.log 输出调试日志,使用console对象直接将日志输出到控制台,由于Node.js和浏览器环境都默认支持console对象,所以,这种方式是最直接和最简洁的。

但是,随着项目规模增加,console 控制台输出的日志就会堆积很多而不可读。另一方面,我们需要在开发调试环境才打开日志,而线上生产环境就不需要输出过多的日志。使用 console 对象控制日志输出,我们会自然而然地以“加注释”、“去注释”的方式来控制日志的输出。这样很笨。

debug库就是一款专门控制日志输出的库,能够完美解决我们的上述需求。

首先,debug库会判断DEBUG环境变量,所以我们不需要修改代码,只调整一下程序运行环境就可以控制日志是否输出。另外,debug库不是简单地布尔判断DEBUG环境变量,而是会对DEBUG环境变量进行解析,允许我们选择性地控制输出哪些模块的日志,有效地解决了调试程序时候控制台日志堆积问题,因为我们可以控制debug,让其只输出我们关心的程序模块的日志。

下面就是一段使用了debug库的程序示例。

const Debugger = require('debug');

const a = Debugger('worker:a');
const b = Debugger('worker:b');

function work() {
  a('doing lots of uninteresting work');
  setTimeout(work, Math.random() * 1000);
}

work();

function workb() {
  b('doing some work');
  setTimeout(workb, Math.random() * 2000);
}

workb();

如果设置环境变量DEBUG为 worker:* 那么就会输出所有的日志:

图片描述

如果设置环境变量DEBUG为 worker:a 那么就只会输出worker:a 的日志:

图片描述

从上述例子中,得知DEBUG环境变量的设置支持通配符*。假设,我们的程序中存在如下调试器 "connect:bodyParser"、"connect:compress"、"connect:session",我们可以将DEBUG设置为DEBUG=connect:bodyParser,connect:compress,connect:session ,或者简单地使用通配符 DEBUG=connect:*,如果我们需要调试非connect相关的其他信息,可以使用 - 符号,“减去” connect,DEBUG=*,-connect:*

在浏览器端,debug也能够很好地运行,不过在浏览器端开启调试,并不是使用DEBUG环境变量,因为浏览器端不支持process.env.DEBUG访问。在浏览器端,使用localStorage 对象控制debug:

localStorage.debug = 'worker:*'

图片描述

参考: https://github.com/visionmedi...

欢迎关注公众号:梁兴臣

梁兴臣

每天了解一个NPM库,一年后成为Node.js高手


脉冲云_梁兴臣
616 声望194 粉丝

脉冲云CTO,JS全栈开发,DevOps实施,开发体验优化,开发效率提升