Stavo guardando migliori sistemi di registrazione Node: npmlog
, log4js
, bunyan
e winston
e ha deciso di utilizzare winston
per avere le più npm
download mensili.Come registrare oggetti e array JavaScript in winston come fa console.log?
Quello che voglio impostare è il logger personalizzato che sarò in grado di utilizzare in ambiente di sviluppo con logger.debug(...)
che non registrerà nulla sull'ambiente di produzione. Questo mi aiuterà in questo modo quando sono in ambiente di sviluppo, non avrò bisogno di scrivere nulla visto che vedrò tutte le uscite.
Questo è quello che ho adesso:
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
});
problema si verifica quando sto cercando di accedere JavaScript Object
o Javascript Array
. Con Object
, ho bisogno di fare toJSON()
, e per Array
ho bisogno di prima JSON.stringify()
e poi JSON.parse()
.
Non è bello scrivere sempre questi metodi, solo per registrare qualcosa che voglio. Inoltre, non è nemmeno favorevole alle risorse, perché quei metodi di formattazione devono essere eseguiti prima che logger.debug()
si accorga che è in produzione e che non dovrebbe registrarlo in primo luogo (in pratica, sta valutando gli argomenti prima della chiamata alla funzione). Mi piace il modo in cui il vecchio stile console.log()
registra oggetti e array JavaScript.
Ora, mentre sto scrivendo questa domanda, ho scoperto che esiste un modo di descrivere custom format per ogni oggetto winston transports
. È questo il modo di farlo, o c'è un altro modo?
Fornire alcune spiegazioni sulla risposta al motivo per cui funziona in questo modo o su cosa l'OP stava facendo male. Solo un codice incolla come questo viene contrassegnato. –
La migliore soluzione che ho visto qui. Usa l'API del registratore esistente e stampa tutto graziosamente. –