La documentazione Winston ha una sezione su streaming logs che dice:Come funzionano gli stream di log di Winston?
Streaming permette lo streaming i log di ritorno dalla vostra scelta trasporto.
e fornisce il seguente esempio di codice:
//
// Start at the end.
//
winston.stream({ start: -1 }).on('log', function(log) {
console.log(log);
});
La mia lettura di questo è che ogni nuovo messaggio di log aggiunto sarebbe uscita per la console. La configurazione {start: -1}
indica allo stream di avviarsi alla fine del file, quindi vengono visualizzate solo le nuove voci del registro. Prevedo che il seguente script di Nodo provocherebbe che ogni riga esistente del file test.log
venga emessa nella console e quindi un nuovo oggetto venga emesso ogni 500 ms da quel momento in poi.
var winston = require('winston');
winston.add(winston.transports.File, {
filename: 'test.log'
});
winston.remove(winston.transports.Console);
winston.stream().on('log', function(log) {
console.log(log);
});
setInterval(function(){
winston.log('info', 'help');
}, 500);
mi sarei aspettato di vedere qualcosa di simile al seguente output:
{"level":"info","message":"help","timestamp":"2013-12-10T05:55:15.806Z"}
{"level":"info","message":"help","timestamp":"2013-12-10T05:55:16.307Z"}
{"level":"info","message":"help","timestamp":"2013-12-10T05:55:16.809Z"}
{"level":"info","message":"help","timestamp":"2013-12-10T05:55:17.309Z"}
{"level":"info","message":"help","timestamp":"2013-12-10T05:56:48.316Z"}
Che cosa realmente accade è che la registrazione funziona come previsto con il trasporto di file (il file ha una nuova voce di registro ogni 500ms) ma non c'è uscita alla console. La linea console.log(log)
non viene mai chiamata.
Ho perso qualcosa di ovvio, o frainteso lo scopo dei flussi di log di Winston?
forse usano l'evento convenzionale "dati"? – bevacqua
Ho avuto lo stesso problema e ho il sospetto che non funzioni con i trasporti File o Console poiché questi sono i due che ho provato e la richiamata non viene mai chiamata. @Nico, questo codice è direttamente dal README di winston e nel codice: out.emettere ('log', log); Il problema è che niente di ciò che ho provato sembra funzionare :( –
Grazie per aver confermato i miei sospetti @RobinDuckett. Lo avrei archiviato come un bug, ma Winston sembra più o meno morto: https: // github. com/flatiron/winston/issues/294 Potrebbe essere necessario fork. – drzax