Nodejs- console.error vs util.debug

我注意到node.js同时具有console.errorutil.debug ,以及console.logutil.log

除了控制台之外,还有什么区别吗? API表示他们分别写入stdout和stderr。

如果没有区别,我应该使用哪个,为什么?

他们是两个不同的function,做两件不同的事情。 学习阅读来源。 它会帮助你很多(即使在C#reflection器等语言中)

来源

安慰

https://github.com/joyent/node/blob/master/lib/console.js

 Console.prototype.warn = function() { this._stderr.write(util.format.apply(this, arguments) + '\n'); }; Console.prototype.error = Console.prototype.warn; 

utils的

https://github.com/joyent/node/blob/master/lib/util.js

 exports.debug = function(x) { process.stderr.write('DEBUG: ' + x + '\n'); }; 

日志function:

安慰

 exports.log = function() { process.stdout.write(format.apply(this, arguments) + '\n'); }; 

utils的

 exports.log = function(msg) { exports.puts(timestamp() + ' - ' + msg.toString()); }; exports.puts = function() { for (var i = 0, len = arguments.length; i < len; ++i) { process.stdout.write(arguments[i] + '\n'); } }; 

为什么

和其他所有面向Unix的系统一样,哪一个节点最明显地以幌子为参照 – 看到Ryan对这个主题的许多评论,日志function也是以同样的方式给出的。 有两个基本的日志类,他们都有效地做同样的事情,但由于不同的原因。 对不经意的观察者来说,他们是一样的,但他们并不是真的。

控制台日志logging打算在debugging过程中使用。 这将转到STDOUT并将在REPL 1控制台上显示您的语句,对debugging很有用。

实用程序日志logging旨在用于标准服务运行时期间。 他们将得到STDOUT 进程 ,这通常是进程的日志文件。

但是,由于这个问题可以在需要时被外部覆盖,而且由于Windows进程(考虑到新的端口和开发)和其他系统的未来(最有可能)将会不同,所以您应该尝试使用这些方法作为事实在正常运行时写入日志的方式 。 Windows中不同的例子包括使用系统日志进行日志logging,而不是直接的日志文件。

那么你怎么知道你需要哪一个?

如果您打算在REPL中执行此操作以进行debugging,请使用控制台logging器。 如果您打算启动该服务并忘记该服务,请使用utils日志logging。

1 – 读取评估打印循环

乔·拉普对目前公认的答案的评论值得提出来作为答案:

仅供参考:utils.print,.puts,.debug和.error现在都已弃用。 build议使用console.log而不是.print和.puts,并build议使用console.error而不是.debug和.error。 请参阅使用情况代码

参考文献:

Node.js文件

当前使用的代码

控制台方法更健壮,因为你可以传递n个参数,并且在写入标准输出或标准错误之前它们将被连接起来,但是它们都是对stdout和stderr的相同底层调用的便捷包装。

.log,.info和.dir是非阻塞的。
.warn和.error被阻塞。

console.log和util.log都使用process.stdout.write写入。 console.error和util.debug都使用process.binding(“stdio”).writeError进行写入。