132 votes

Ajout d'un horodatage à tous les messages de la console

J'ai un complet, déployé Ce projet est basé sur Express et comporte de nombreuses instructions console.log() et console.error(). Le projet s'exécute en utilisant forever, dirigeant le stdout et le stderr vers 2 fichiers séparés.

Tout fonctionne très bien, mais il me manque maintenant les timestamps - pour savoir exactement quand les erreurs se sont produites.

Je peux faire une sorte de recherche/remplacement dans tout mon code, ou utiliser un module npm qui remplace la console dans chaque fichier, mais je ne veux pas toucher à chaque fichier de modèle/route, sauf si je dois absolument le faire.

Existe-t-il un moyen, peut-être un middleware Express, qui me permettrait d'ajouter un horodatage à chaque appel effectué, ou dois-je l'ajouter manuellement ?

1voto

mlosev Points 453

Vous pouvez utiliser une fonction util.log de https://nodejs.org/api/util.html .

Sachez qu'il a été déprécié depuis la version 6.0.0.

Pour les versions supérieures, vous devez "Utilisez plutôt un module tiers."

1voto

Zach Smith Points 2093

J'essaie d'écraser le console semble bien fonctionner. Pour l'utiliser, enregistrez le code ci-dessous dans un fichier, puis importez-le pour écraser l'objet proxy, et ensuite utilisez-le normalement.

(Notez que cela nécessite une transpilation babel et ne fonctionnera pas dans les environnements qui ne supportent pas le langage JavaScript. Proxy constructeur comme IE 11).

import console from './console-shadow.js'

console.log(...)
console.warn(...)
console.error(...)

// console-shadow.js

// Only these functions are shadowed by default
const overwrites = ['log', 'warn', 'info', 'error']

export default new Proxy(
  // Proxy (overwrite console methods here)
  {},

  // Handler
  {
    get: (obj, prop) =>
      prop in obj
        ? obj[prop]
        : overwrites.includes(prop)
        ? (...args) => console[prop].call(console, new Date(), ...args)
        : console[prop],
  }
)

En gros, j'écrase l'objet console avec un objet proxy JavaScript. Lorsque vous appelez .log , .warn La console écrasée vérifiera si ce que vous appelez est une fonction, si c'est le cas, elle injectera une date dans l'instruction log comme premier paramètre, suivie de tous vos paramètres.

Je pense que le console L'objet fait en fait beaucoup de choses, et je ne le comprends pas complètement. Donc j'intercepte seulement console.log , console.info , console.warn , console.error appels.

-1voto

JsWizard Points 385

Utilisez l'écouteur d'événements comme ceci,

process.on('error', function() { 
   console.log('Error Occurred.');

   var d = Date(Date.now()).toString();
   console.log.call(console, d); // Wed Aug 07 2019 23:40:07 GMT+0100 (GMT+01:00)
});

bon codage :)

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