Wir verwenden morgan
, um unsere Express-Transformation zu protokollieren:
var morgan = require('morgan');
morgan('combined');
// a format string
morgan(':remote-addr :method :url :uuid');
// a custom function
morgan(function (req, res) {
return req.method + ' ' + req.url + ' ' + req.uuid;
})
Außerdem verwenden wir, winston
um unsere andere Protokollierung zu protokollieren:
var winston = require('winston');
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({ level: 'info' }),
new (winston.transports.File)({ filename: '/var/log/log-file.log' })
]
});
Gibt es eine Möglichkeit, die beiden Logger miteinander zu kombinieren? die Situation jetzt ist , dass morgan
Schreiben in meinem Standard - Ausgabe ist, wenn winston
schreibt /var/log/log-file.log
.
Ich wünsche mir, dass die Logger-Datei aus den Express-Transformationsinformationen und den anderen gewünschten Informationen ( logger.info()
) kombiniert wird .
Antworten:
Dieser Artikel leistet hervorragende Arbeit für das, was Sie tun möchten.
http://tostring.it/2014/06/23/advanced-logging-with-nodejs/
Für Ihren spezifischen Code benötigen Sie wahrscheinlich Folgendes:
Dadurch wird Winston so eingerichtet, dass er ein Protokoll sowie eine Datei in die Konsole schreibt. Dann können Sie den letzten Ausdruck verwenden, um die Ausgabe der Morgan Middleware an Winston zu übergeben.
quelle
app.use(morgan("combined", { stream: { write: message => logger.info(message) }}));
logger.info(message.trim())
winston: ^3.0.0
Verwendungwinston.createLogger
anstelle vonnew winston.Logger
Im Typoskript:
quelle
Aktualisieren Sie die letzte Zeile, um die Warnung zu entfernen
quelle
Für Typescript ist ein anderer Weg, dies zu tun, ohne eine Klasse erstellen zu müssen,
Diese Lösung wurde von dieser Github-Seite https://github.com/winstonjs/winston/issues/1385 entfernt . Es ist jedoch wichtig zu beachten, dass es einen kleinen Unterschied zwischen unseren Codes gibt. Anstatt:
Ich benutze:
Dies hat mir geholfen, da ich beim Erstellen von Klassen nicht zu groß bin.
quelle
Morgan hat die schlechte Angewohnheit, die Nachricht mit einem
\n
zu beenden , um die Dinge ordentlich zu machen. Vielleicht möchten Sie das entfernen, bevor Sie es an Winston schreiben.Dies kann auf viele verschiedene Arten geschehen, beispielsweise auf der Formatseite in Winston oder durch Aktualisieren Ihres Streams, um das nicht zu schreiben
\n
quelle