我的JS代码通常充满了console.log()
调试消息。有时最好关闭它们,或者关闭它们的某些部分。
console.log()
语句,条件由某些常量定义。它是管理调试输出的最佳方式还是更优雅的替代方案?
答案 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)。