Comment ouvrir une session JavaScript les objets et les tableaux à winston console.journal?
Je regardais le Nœud supérieur de systèmes d'enregistrement: npmlog
, log4js
, bunyan
et winston
et décidé de l'utiliser winston
pour avoir le plus de npm
mensuel de téléchargements.
Ce que je veux mettre en place est de coutume de l'enregistreur de qui je vais être en mesure d'utiliser l'environnement de développement avec logger.debug(...)
qui n'est pas le journal de quoi que ce soit sur l'environnement de production. Cela va m'aider alors, quand je suis sur l'environnement de développement, je n'aurez pas besoin d'écrire quoi que ce soit puisque je vais en voir de toutes les sorties.
C'est ce que j'ai maintenant:
var level = 'debug';
if (process.env.NODE_ENV !== 'development'){
level = 'production'; //this will never be logged!
}
var logger = new winston.Logger({
transports: [
//some other loggings
new winston.transports.Console({
name: 'debug-console',
level: level,
prettyPrint: true,
handleExceptions: true,
json: false,
colorize: true
})
],
exitOnError: false //don't crush no error
});
Problème se produit lorsque j'essaie de connecter JavaScript Object
ou Javascript Array
. Avec Object
, j'ai besoin de faire toJSON()
, et pour Array
j'ai besoin d'abord JSON.stringify()
et puis JSON.parse()
.
C'est pas gentil d'écrire tout le temps cette méthode, juste pour se connecter à quelque chose que je veux. En outre, il n'est même pas économe en ressources, car ces méthodes de formatage doivent être exécutés avant logger.debug()
se rend compte que c'est sur la production et qu'il ne devrait pas se connecter en premier lieu (en gros, c'est l'évaluation des arguments de l'appel de fonction). J'aime juste la façon dont le vieux-fashined console.log()
journaux JavaScript les objets et les tableaux.
Maintenant, comme je l'ai écris à cette question, j'ai trouvé qu'il y est une façon de décrire format personnalisé pour chaque winston transports
objet. C'est que la façon de le faire, ou est-il un autre moyen?
OriginalL'auteur Tommz | 2015-10-15
Vous devez vous connecter pour publier un commentaire.
essayez de changer prettyPrint paramètre
prettyPrint: JSON.stringify
L'habitude de ce échouer si
object
a de la circulaire de référence?OriginalL'auteur Bharat Kul Ratan
Winstons utilise le haut-utils.format de la bibliothèque.
https://nodejs.org/dist/latest/docs/api/util.html#util_util_format_format_args
La meilleure solution que j'ai vu ici. Utilise les bûcheron de l'api et imprime tout assez.
Juste un rappel, vous avez besoin d'avoir format.splat() est activée. Sinon il ne fonctionne pas.
OriginalL'auteur Leo
Utiliser le haut-Node.js fonction
util.format
pour convertir vos objets à cordes de la même manière queconsole.log
.OriginalL'auteur Radon Rosborough
Ma recommandation est d'écrire votre propre abstraction sur le dessus de winston qui a une méthode bien pratique pour l'impression de vos objets à des fins de débogage.
Vous pouvez également consulter cette réponse pour un soupçon de comment la méthode peut être développé.
https://stackoverflow.com/a/12620543/2211743
OriginalL'auteur ambrons
Que Leo l'a déjà souligné dans son réponse, Winston fait usage de Chaîne D'Interpolation fournis par util.format:
Lors de l'appel de
logger.log
, vous pouvez définir des espaces réservés qui seront correctement remplacée.%j
sera remplacé par l'équivalent deJSON.stringify(nestedObj)
OriginalL'auteur K435