Console.log调试消息管理

时间:2013-05-11 15:35:33

标签: javascript node.js

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

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

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分:4)

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

答案 2 :(得分:3)

如果你正在使用Node.js,那么debug作为console.log()的替代品非常有效

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

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

one.js

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

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

two.js

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

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

您已使用名称" one-one"初始化调试。在第一个文件和"一二 - "在第二个文件中。

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

node index.js

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

DEBUG=* node index.js

这两个调试语句都会以不同的颜色和调试名称(一个或一个两个)写出来,所以我可以告诉它们来自哪个文件。

现在让我们说你想把它缩小一点。你可以运行:

  

DEBUG = * - 两个节点index.js

仅从" -two"设置调试的输出。在名称末尾或

  

DEBUG = one- * node index.js

以"一个 - "

开头

您还可以说您想要所有内容,或一组内容,或排除模式或集合。要用破折号排除前面的内容,例如:

  

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

这将包括以" one"开头的所有内容。或者"猴子"并排除任何名为" monkey:banana",或" elephant"或者以"黑猩猩开始:"

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

  

DEBUG = *, - pattern1,-pattern2 node index.js

答案 3 :(得分:2)

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