46 votes

Nodejs- console.error vs util.debug

J'ai remarqué que node.js a à la fois console.error y util.debug ainsi que console.log y util.log .

Y a-t-il une différence en dehors du fait que les fonctions console.* sont plus robustes dans les paramètres qu'elles prennent ? L'API indique qu'elles écrivent respectivement sur stdout et stderr.

S'il n'y a pas de différence, lequel dois-je utiliser et pourquoi ?

57voto

jcolebrand Points 11824

Ce sont deux fonctions différentes, qui font deux choses différentes. Apprenez à lire la source. Cela vous aidera beaucoup (même dans des langages comme le C# avec le réflecteur).

Sources

Console

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

Fonctions du journal :

Console

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

Pourquoi

Comme avec tout autre système orienté Unix, dont le nœud est très certainement orienté sous l'apparence de - voir les nombreux commentaires de Ryan sur le sujet, les fonctions de journalisation sont données sous la même apparence. Il existe deux classes de base pour la journalisation, et elles font toutes deux effectivement la même chose, mais pour des raisons différentes. Pour l'observateur occasionnel, elles sont identiques, mais elles ne le sont pas vraiment.

Journalisation de la console est destiné à être utilisé pendant le débogage. Cette commande sera envoyée à STDOUT et affichera vos déclarations dans le REPL. 1 console, utile pour le débogage.

Enregistrement des utilitaires est destiné à être utilisé pendant l'exécution des services standard. Ils passeront par le processus STDOUT, qui est souvent un fichier journal du processus.

Mais comme il est possible de passer outre au besoin, et parce que cela sera différent à l'avenir (très probablement) pour les processus Windows (étant donné les nouveaux ports et développements) et d'autres systèmes, vous devriez essayer d'utiliser ces méthodes comme suit la manière de facto d'écrire dans les journaux pendant l'exécution normale. . Parmi les exemples de différences avec Windows, citons l'utilisation du journal du système pour la journalisation, par opposition à un simple fichier journal.

Alors comment savoir lequel il vous faut ?

Si vous avez l'intention de l'exécuter dans le REPL pour le débogage, utilisez le logger de la console. Si vous avez l'intention de démarrer le service et de l'oublier, utilisez le logger utils.

<sup>1 </sup>- Lire Evaluer Imprimer Boucle

13voto

Johann Points 750

Le commentaire de Joe Lapp à la réponse actuellement acceptée mérite d'être élevé au rang de réponse :

Pour info : utils.print, .puts, .debug, et .error sont maintenant tous dépréciés. console.log est conseillé à la place de .print et .puts, et console.error est conseillé à la place de .debug et .error. Voir le code des utils

Références :

La documentation de Node.js

Le code actuel des utils

1voto

Ben Taber Points 2164

Les méthodes de la console sont plus robustes dans la mesure où vous pouvez passer n arguments et qu'ils seront concaténés avant d'être écrits dans stdout ou stderr, mais elles sont toutes deux des enveloppes de commodité autour des mêmes appels sous-jacents à stdout et stderr.

Les fichiers .log, .info et .dir ne sont pas bloquants.
.warn et .error sont bloquants.

console.log et util.log écrivent tous deux en utilisant process.stdout.write. console.error et util.debug écrivent tous deux en utilisant process.binding("stdio").writeError.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X