node.js - Nodejs-console.error vs util.debug

标签 node.js

我注意到node.js既有console.errorutil.debug,也有console.log util.log.

除了 console.* 函数在参数上更健壮之外,还有什么不同吗? API 表示它们分别写入 stdout 和 stderr。

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

最佳答案

它们是两种不同的功能,做两种不同的事情。学习阅读源代码。它会对你有很大帮助(即使是像 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;

实用程序

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

实用程序

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 的系统一样,哪个 Node 最明确地适合于 - 请参阅 Ryan 关于该主题的许多评论,日志功能以相同的形式给出。有两个用于日志记录的基本类,它们都有效地做同样的事情,但出于不同的原因。对于不经意的观察者来说,它们是相同的,但它们并不是真的。

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

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

但是由于这可以在需要时被外部覆盖,并且因为 Windows 进程(考虑到新的端口和开发)和其他系统在未来(很可能)会有所不同,所以你应该尝试使用这些方法作为在正常运行时写入日志的实际方式。它在 Windows 中的不同之处的示例包括使用系统日志进行日志记录,而不是直接的日志文件。

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

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

1 – 读取评估打印循环

关于node.js - Nodejs-console.error vs util.debug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6702456/

相关文章:

node.js - 无法从返回的 sequelize JSON 对象中获取特定的 dataValue

node.js - hsts 已弃用 "includeSubdomain"参数已弃用

javascript - Node.js 如何在没有任何信息的情况下悄无声息地崩溃?

javascript - 特快专递请求不会获取数据

node.js - 我的简单代码不适用于快速验证器

mysql - Sequelize 迁移文件 : adding createdAt and updatedAt columns

javascript - 为什么 vue 在 Laravel 中的行为与独立 vue 应用程序不同?

javascript - 如何在 Javascript 中等待异步事件?

javascript - 使用 aws sdk (nodejs) 在 AWS S3 中创建一个空文件夹

javascript - Scraper 不使用 Cheerio 使用 jquery 返回任何值