7

我的 JS 代码通常充满了console.log()调试信息。有时最好关闭它们,或者关闭其中的一部分。

例如,我可以console.log()使用由某些常量定义的条件将语句包装在某些函数中。它是管理调试输出的最佳方式还是更优雅的选择?

4

4 回答 4

5

Bunyan日志记录模块在 node.js 中很受欢迎

示例代码hi.js

var bunyan = require('bunyan');
var log = bunyan.createLogger({name: 'myapp'});
log.info('hi');
log.warn({lang: 'fr'}, 'au revoir');

输出:

{"name":"myapp","hostname":"localhost","pid":40161,"level":30,"msg":"hi","time":"2013-01-    04T18:46:23.851Z","v":0}
{"name":"myapp","hostname":"localhost","pid":40161,"level":40,"lang":"fr","msg":"au revoir","time":"2013-01-04T18:46:23.853Z","v":0}

然后,您可以从命令行过滤:

$ node hi.js | bunyan -l warn
[2013-01-04T19:08:37.182Z]  WARN: myapp/40353 on localhost: au revoir (lang=fr)
于 2013-05-11T20:55:20.520 回答
4

包装console.log成一个函数效果很好。但请注意,还有很多用于 javascript 的日志记录实用程序。“js logger”上的小谷歌可能会产生合适的结果。

于 2013-05-11T15:37:18.723 回答
3

如果您使用的是 Node.js,那么debug作为 console.log() 的替代方法非常有效

它基本上是 console.log() 的替代品,除了您可以根据您在每个文件中初始化它的方式,使用 DEBUG 环境变量在命令行启用它。

假设我有一个项目,其中包含从我的 index.js 文件中引用的几个文件:

one.js

var debug = require('debug')('one-one');

var func = function() {
  debug('func');
}

二.js

var debug = require('debug')('one-two');

var func = function() {
  debug('func');
}

您已在第一个文件中使用名称“one-one”初始化调试,在第二个文件中使用名称“one-two”初始化。

在命令行上,我可以像这样运行它们:

node index.js

结果:没有调试输出。但是,如果我这样运行它:

DEBUG=* node index.js

然而,这两个调试语句都会以不同的颜色和调试名称(一一或一二)被写出,这样我就可以知道它们来自哪个文件。

现在假设您想进一步缩小范围。你可以运行:

DEBUG=*-二节点index.js

仅从名称末尾使用“-two”设置的调试中获取输出或

DEBUG=one-* 节点 index.js

让一切都以“one-”开头

你也可以说你想要所有东西,或者一组东西,或者排除模式或集合。要排除某些内容,请在其前面加上破折号,例如:

DEBUG=one*,monkey*,-monkey:banana,-elephant,-chimp:* node index.js

这将包括以“one”或“monkey”开头的所有内容,并排除任何名为“monkey:banana”或“elephant”或以“chimp:”开头的内容

如果您想排除除此之外的所有内容:

DEBUG=*,-pattern1,-pattern2 节点 index.js

于 2014-10-22T21:15:43.453 回答
2

JS logger是一个非常好的轻量级工具,具有灵活的日志消息级别设置和几个预定义的日志级别(DEBUG、INFO、WARN、ERROR)。

于 2013-05-11T16:49:26.230 回答