Nodejs- console.error vs util.debug

bea*_*mit 46 node.js

我注意到,node.js中既有console.errorutil.debug,以及console.logutil.log.

除了控制台之外是否有区别.*功能在它们采用的参数中更加强大?API表示他们分别写入stdout和stderr.

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

jco*_*and 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;
Run Code Online (Sandbox Code Playgroud)

utils的

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

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

日志功能:

安慰

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

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');
  }
};
Run Code Online (Sandbox Code Playgroud)

为什么

与其他所有面向Unix的系统一样,哪个节点绝对是以幌子为标准 - 请参阅Ryan关于该主题的许多评论,日志功能以相同的形式给出.记录有两个基本类,它们都有效地执行相同的操作,但原因各不相同.对于不经意的观察者来说,他们是一样的,但他们并不是真的.

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

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

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

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

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

1 - 读取评估打印循环

  • 这个答案很长,并不完全清楚.它也不完全正确,因为代码已经改变了.这两个函数*都*转到"进程"stdio,并且在两种情况下都可以发送到终端或日志文件.我能看到的唯一区别归结为格式化.util.*函数有一个set格式,只是迭代你的参数,其中console.*函数接受一个字符串和一个字符串格式. (9认同)
  • 仅供参考:utils.print,.puts,.debug和.error现已全部弃用.建议使用console.log而不是.print和.puts,建议使用console.error而不是.debug和.error.请参阅utils代码. (7认同)

Joh*_*ann 13

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

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

参考文献:

Node.js文档

当前的utils代码