Nodejs- console.error vs util.debug

时间:2011-07-15 03:41:15

标签: node.js

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

除控制台之外是否存在差异。*函数在参数中更加强大? API表示他们分别写入stdout和stderr。

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

3 个答案:

答案 0 :(得分:57)

它们是两个不同的功能,它们可以做两件不同的事情。学习阅读来源。它会对你有很大的帮助(即使是像C#这样的反射器语言)

来源

控制台

  

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');
};

日志功能:

控制台

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关于该主题的许多评论,日志功能以相同的形式给出。记录有两个基本类,它们都有效地执行相同的操作,但原因各不相同。对于不经意的观察者来说,他们是一样的,但他们并不是真的。

控制台日志记录旨在在调试期间使用。这将转到STDOUT并在REPL 1 控制台上显示您的语句,对调试很有用。

实用程序日志记录旨在用于标准服务运行时。他们将转到 进程 STDOUT,它通常是该进程的日志文件。

但是,由于这可以在需要时向外覆盖,并且因为在将来(最有可能)Windows进程(给定新的端口和开发)和其他系统将会有所不同,那么您应该尝试使用这些方法作为 在正常运行时写入日志的事实上的方法 。在Windows中它将如何不同的示例包括使用系统日志进行日志记录,而不是直接日志文件。

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

如果您计划在REPL中运行此命令以进行调试,请使用控制台记录器。如果您打算启动该服务并忘记它,请使用utils logging。

1 - 阅读评估打印循环

答案 1 :(得分:13)

Joe Lapp对当前接受的答案的评论值得提出作为答案:

  

仅供参考:utils.print,.puts,.debug和.error现已全部弃用。建议使用console.log而不是.print和.puts,建议使用console.error而不是.debug和.error。请参阅utils代码

参考文献:

The Node.js Docs

The current utils code

答案 2 :(得分:1)

控制台方法更健壮,因为你可以传递n个参数,它们会在写入stdout或stderr之前连接起来,但它们都是围绕对stdout和stderr进行相同底层调用的便捷包装。

.log,.info和.dir是非阻止的 .warn和.error正在阻止。

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